On Sat, 2017-05-13 at 05:03 -0700, Jonathan M Davis via Digitalmars-d- learn wrote: > […] > SysTime st; > try > { > // If it's YYYY-MM-DDTHH:MM:SS.FFFFFFFZ > // If it's YYYY-MM-DDTHH:MM:SS.FFFFFFZ > // If it's YYYY-MM-DDTHH:MM:SS.FFFFFZ > // If it's YYYY-MM-DDTHH:MM:SS.FFFFZ > // If it's YYYY-MM-DDTHH:MM:SS.FFFZ > // If it's YYYY-MM-DDTHH:MM:SS.FFZ > // If it's YYYY-MM-DDTHH:MM:SS.FZ > // or YYYY-MM-DDTHH:MM:SSZ > // or YYYY-MM-DDTHH:MM:SS.FFFFFFF > // or YYYY-MM-DDTHH:MM:SS.FFFFFF > // or YYYY-MM-DDTHH:MM:SS.FFFFF > // or YYYY-MM-DDTHH:MM:SS.FFFF > // or YYYY-MM-DDTHH:MM:SS.FFF > // or YYYY-MM-DDTHH:MM:SS.FF > // or YYYY-MM-DDTHH:MM:SS.F > // or YYYY-MM-DDTHH:MM:SS > st = SysTime.fromISOExtString(str); > } > catch(DateTimeException) > { > try > { > // If it's just YYYY-MM-DD > st = SysTime(Date.fromISOExtString(str)); > }
A variation on this is where I have gone, so that you are not telling me I am doing it wrong, means it is probably the least worst solution. I do a cascade of attempting to construct using SysTime.fromISOString, SysTime.fromISOExtString, DateTime.fromISOString, DateTime.fromISOExtString, Date.fromISOString, Date.fromISAExtString (creating a SysTime in the latter four cases obviously). > catch(DateTimeException) > { > // If it's just HH:MM:SS > st = SysTime(Date.init, TimeOfDay.fromISOExtString(str)); > } > } I haven't got to this stage as yet, but I suspect I am going to have to. > But that would be downright bizarre in the case where it was just > HH:MM:SS, > because then you'd end up with a SysTime on January 1st, 1 A.D. And > while > getting just the date is less awkward, it's still kind off to then > operate > on that as a SysTime. The time would always be at midnight. I think you have to use the current date/time and extract the Date to initialise. Times have to be in extended format to avoid the YYYY HHMM conflict you pointed out. > Really, just parsing an "ISO formatted string" and allowing either > the date > or time to be optional doesn't make much sense to me. That implies > that you > don't really know what it's for, since the meaning of something that > is just > a date and the meaning of something that is just a time are > completely > different. I disagree. There is now and some temporal location in the past. Separating out durations makes that easy. Using a time means sometime today before now or is an error. Using a date/time means before today or is an error. This is not a general case, it is a specific need for the use of two date/times, and it seems all viable to me. Actually I can probably separate date/times and times as well as separating out durations before now to make things easier. > Regardless, std.datetime was designed with the idea that you knew > whether > you were dealing with a date, a time, or both a date and a time when > dealing > with ISO formatted strings. I'll get round it. Now I have "from the horses mouth" the guidance around my questions, I am fairly confident of where to go to achieve the goal. It will not be pretty, but it will be doable without having to create a magic parsing function. Thanks for your exchanges on this, most constructive and most helpful. -- Russel. ============================================================================= Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.win...@ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: rus...@winder.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
signature.asc
Description: This is a digitally signed message part