August 15 [Issue 24704] New: DateTime.fromISOExtString Does Not Support ISO8601 Time Unit Fractions | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=24704 Issue ID: 24704 Summary: DateTime.fromISOExtString Does Not Support ISO8601 Time Unit Fractions Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: phobos Assignee: nobody@puremagic.com Reporter: madric@gmail.com ## Summary When parsing ISO8601 date-times using DateTime.fromISOExtString, the fraction component of the last time unit causes an exception to be thrown. ## Context The method https://dlang.org/phobos/std_datetime_date.html#.DateTime.fromISOExtString is built to support the ISO8601 standard: https://en.wikipedia.org/wiki/ISO_8601#Times According to this standard: > A decimal fraction may be added to the lowest order time element present in any of these representations. A decimal mark, either a comma or a dot on the baseline, is used as a separator between the time element and its fraction. (Following ISO 80000-1 according to ISO 8601:1-2019,[27] it does not stipulate a preference except within International Standards, but with a preference for a comma according to ISO 8601:2004.[28]) For example, to denote "14 hours, 30 and one half minutes", do not include a seconds figure; represent it as "14:30,5", "T1430,5", "14:30.5", or "T1430.5". > > There is no limit on the number of decimal places for the decimal fraction. However, the number of decimal places needs to be agreed to by the communicating parties. For example, in Microsoft SQL Server, the precision of a decimal fraction is 3 for a DATETIME, i.e., "yyyy-mm-ddThh:mm:ss[.mmm]".[29] ## Steps To Reproduce the Problem Create the following program: ``` void main() { import std.datetime; auto b = DateTime.fromISOExtString("2024-08-15T08:13:23.000"); } ``` ## Expected Results The date-time should be parsed, with the fraction being interpreted as a fraction of the seconds unit. ## Actual Results An exception is thrown of the form: ``` core.time.TimeException@/dlang/dmd/linux/bin64/../../src/phobos/std/datetime/date.d(9334): Invalid ISO Extended String: 08:13:23.000 ---------------- /dlang/dmd/linux/bin64/../../src/phobos/std/datetime/date.d:9334 pure @safe std.datetime.date.TimeOfDay std.datetime.date.TimeOfDay.fromISOExtString!(immutable(char)[]).fromISOExtString(scope const(immutable(char)[])) [0x5626aa88fea9] /dlang/dmd/linux/bin64/../../src/phobos/std/datetime/date.d:3271 pure @safe std.datetime.date.DateTime std.datetime.date.DateTime.fromISOExtString!(immutable(char)[]).fromISOExtString(scope const(immutable(char)[])) [0x5626aa87f85e] ./onlineapp.d:7 _Dmain [0x5626aa87ebc7] ``` -- |
Copyright © 1999-2021 by the D Language Foundation