C# ISO 8601值的分析日期24:00:00失败
我正试图解析来自数据源(无法更改)的传入日期。它给了我ISO 8601格式的时间示例:C# ISO 8601值的分析日期24:00:00失败,c#,datetime,iso8601,C#,Datetime,Iso8601,我正试图解析来自数据源(无法更改)的传入日期。它给了我ISO 8601格式的时间示例:2007-04-05T24:00 然而,在.Net中,它无法将此解析为有效时间 维基百科声明它应该是有效的格式 来自 如果没有讨厌的字符串检查黑客,我怎么能做到这一点 示例(小提琴:): 抛出: 日历中不支持由字符串表示的日期时间 System.Globalization.Gregorianalendar 是的,据我所知,.NET不支持此功能 我的项目可以,但只是部分:它可以解析值,但值只解析到第二天开始时的午
2007-04-05T24:00
然而,在.Net中,它无法将此解析为有效时间
维基百科声明它应该是有效的格式
来自
如果没有讨厌的字符串检查黑客,我怎么能做到这一点
示例(小提琴:):
抛出:
日历中不支持由字符串表示的日期时间
System.Globalization.Gregorianalendar
是的,据我所知,.NET不支持此功能 我的项目可以,但只是部分:它可以解析值,但值只解析到第二天开始时的午夜,并且从未格式化为24:00。野田佳彦时间概念模型中没有任何东西可以代表“一天的结束” 显示可能的示例代码:
using System;
using NodaTime;
using NodaTime.Text;
class Test
{
static void Main()
{
string text = "2007-04-05T24:00";
var pattern = LocalDateTimePattern.CreateWithInvariantCulture
("yyyy-MM-dd'T'HH:mm");
var dateTime = pattern.Parse(text).Value;
Console.WriteLine(pattern.Format(dateTime)); // 2007-04-06T00:00
}
}
如果您不介意丢失“2007-04-05T24:00”和“2007-04-05T00:00”输入之间的差异,那么您可能没事。请注意,由于虚线的原因,您的日期部分是ISO-8601-Ext。C#也同样挑剔吗?我试着没有破折号,但它给了我一个例外:“字符串未被识别为有效的日期时间。”
是的,.NET据我所知不支持这一点
。那不是在什么地方吗?你似乎就是那个“知道”这些事情的人,对吧@bas如果你看,没有格式支持24
作为一小时。@bas:嗯,“HH”自定义格式说明符被记录为:“小时,使用24小时时钟从00到23。”谢谢Jon,这解决了我的问题。我从SAP XML exports导入时出错。@Chris:很高兴听到:)无可否认,我们很幸运Noda Time做到了这一点-我想我在阅读ISO-8601时碰巧发现了它。。。
using System;
using NodaTime;
using NodaTime.Text;
class Test
{
static void Main()
{
string text = "2007-04-05T24:00";
var pattern = LocalDateTimePattern.CreateWithInvariantCulture
("yyyy-MM-dd'T'HH:mm");
var dateTime = pattern.Parse(text).Value;
Console.WriteLine(pattern.Format(dateTime)); // 2007-04-06T00:00
}
}