Tag: iso8601

使用DateTime结构解析ISO8601日期/时间

我试图用.NET的DateTime结构解析ISO8601格式的日期/时间字符串。 为了让我完全解决问题,我将使用.NET和JavaScript执行测试。 我目前在英国(英国夏令时,UTC + 01:00)。 我对ISO8601的理解是: 当字符串后缀为“Z”时,时间以UTC表示。 当字符串后缀为“+/- hh:mm”时,时间以本地时间表示,其中“+/- hh:mm”表示与UTC的偏移量。 请考虑以下ISO8601日期/时间格式字符串: “1987-01-05T08:45:30.500+0100” 鉴于我的观点,该字符串表示当地时间为“08:45:30”,UTC时间为“07:45:30” 当前TimeZone测试(.NET) DateTime now = DateTime.Now; Console.WriteLine(now.ToLocalTime()); // 27/08/2013 12:02:43 Console.WriteLine(now.ToUniversalTime()); // 27/08/2013 11:02:43 当前TimeZone测试(JavaScript) var now = new Date(Date.now()); now.toString(); // Tue Aug 27 2013 12:03:46 GMT+0100 (GMT Daylight Time) now.toUTCString(); // Tue, 27 Aug 2013 11:03:46 GMT 除了两个例子之间的微小(分钟/秒)差异之外,它们正在回归我对英国夏令时(UTC + 01:00)的期望。 分钟/秒差异是因为我无法同时运行.NET测试和JavaScript测试。 […]

为什么ISO-8601规范在小数时似乎被普遍忽略?

根据ISO-8601:2004(E)规范: 4.2.2.4带小数部分的表示法 如果特定应用需要,可以包括小时,分钟或秒的小数部分。 如果包含小数部分,则应省略低阶时间元素(如果有),小数部分应从整数部分除以ISO 31-0中指定的小数符号,即逗号[,]或句号[ ]。 其中,逗号是首选标志。 很简单。 因此,根据此规范,优选使用分隔整个和小数部分的逗号来编写分数秒,例如2014-01-01T00:00:00,123 。 然而,似乎几乎无处不在,只接受小数点(又名“完全停止”)! 现在我确定有一些语言或库将这一点考虑在内,我知道在很多情况下你可以自己提供格式的完整细节。 但这似乎是对规范的明显监督,似乎各种程序员都犯了同样的错误。 除了纯粹的人为错误之外,是否存在这种情况的原因? 以下是我测试的地方列表。 如果您找到其他人,请随意编辑问题以扩充我的列表。 谢谢。 .NET / C# DateTime dt = DateTime.Parse(“2014-01-01T00:00:00,123″); 抛出FormatException ,并显示消息“String未被识别为有效的DateTime”。 使用句点而不是逗号进行成功解析。 JavaScript日期对象 最新(在撰写本文时)Chrome,Internet Explorer,Firefox和Node.js进行了测试: var dt = new Date(‘2014-01-01T00:00:00,123’); 返回”Invalid Date” 。 使用句号代替工作正常。 带有moment.js的 JavaScript var valid = moment(“2014-01-01T00:00:00,123”).isValid(); 返回false 。 使用句点代替返回true 。 PHP echo strtotime(‘2014-01-01T00:00:00,123’); 返回一个空字符串。 使用句号代替工作正常。 ruby […]

ISO8601格式化字符串到DateTime

我有以下ISO8601格式的日期时间字符串: 2016-03-28T16:07:00 + 0200 我想将它转换为C# DateTime对象,但我正在使用的解析方法抛出exception。 目前我有这个:(不起作用) string format = “yyyy-MM-ddTHH:mm:ss+zzzz”; CultureInfo provider = CultureInfo.InvariantCulture; // Throws the exception: “String was not recognized as a valid DateTime.” DateTime time = DateTime.ParseExact(“2016-03-28T16:07:00+0200”, format, provider); 如何让解析函数与我的字符串一起使用?

使用时区解析ISO 8601到.NET datetime

我有一个ISO 8601时间戳格式: YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm] YYYY-MM-DDThh:mm:ss[{+|-}hh:mm] 例子: 2013-07-03T02:16:03.000+01:00 2013-07-03T02:16:03+01:00 如何使用提供的正确TimeZone将其解析为.NET Framework DateTime ? DateTime.TryParse不起作用,因为有关TimeZone的尾随信息。

如何解析和生成ISO 8601格式的DateTime对象

有这个SOAP Web服务以下列格式向我发送datetime对象 2016-03-29T12:20:35.093-05:00 那是2016年3月29日。时间:12:20:35.093(GMT-5)。 我希望能够创建一个DateTime对象,如下所示: DateTime.Now 并获得上述格式的字符串表示以及逆操作,从类似上面给出的字符串创建一个DateTime。 我已经尝试了以下内容来创建日期: new DateTime(2016, 3, 29, 12, 20, 35, 093, DateTimeKind.Utc) 但是,我不知道如何在那里指定GMT-5 …… 我不知道如何将DateTime转换为指定的字符串格式。 使用Nate的代码我正在做以下事情: var d = new DateTimeOffset(2016, 3, 29, 12, 20, 35, 93, TimeSpan.FromHours(-3)); FormatIso8601(d) 但是这个电话正在回复:“2016-03-29T15:20:35Z”而不是: “2016-03-29T12:20:35.093-03:00” 这是我真正需要的。 我认为这有效: d.ToString(“yyyy-MM-ddTHH:mm:ss.fffzzz”)