C# 将自定义格式的字符串转换为日期时间
我正在尝试将字符串转换为C# 将自定义格式的字符串转换为日期时间,c#,datetime,C#,Datetime,我正在尝试将字符串转换为DateTime: DateTime newDate = new DateTime(); DateTime.TryParse("20150620 800", out newDate); 返回默认值(1/1/0001 12:00:00 AM),如何正确转换 DateTime.ParseExact(newDate,"yyyyMMdd Hmm", new DateFormatInfo()); 应该有用。仔细检查.Net日期格式字符串引用,以确保它是您想要的 应该有用
DateTime
:
DateTime newDate = new DateTime();
DateTime.TryParse("20150620 800", out newDate);
返回默认值(1/1/0001 12:00:00 AM
),如何正确转换
DateTime.ParseExact(newDate,"yyyyMMdd Hmm", new DateFormatInfo());
应该有用。仔细检查.Net日期格式字符串引用,以确保它是您想要的
应该有用。仔细检查.Net日期格式字符串引用,以确保它符合您的要求。用于获取自定义字符串并将其转换
根据MSDN:
如果格式是不包含日期或日期的自定义格式模式
时间分隔符(如“yyyyMMdd HHmm”)使用不变区域性
用于提供程序参数和每个自定义格式的最宽形式
说明符。例如,如果要在格式中指定小时
模式,指定较宽的形式“HH”,而不是较窄的形式,
“H”
除非更改输入数据,否则无法进行此转换
你会认为这是可行的:(在写这篇文章时,这让我有点困惑)
但是由于H
必须是最宽的形式,它必须是HH
,因为它认为80
超出了小时测量的范围。您需要在8
和00
之间添加一个空格,或者在8
之前添加一个0
这些解决方案将起作用:
DateTime newDate = DateTime.ParseExact("20150620 8 00", "yyyyMMdd H mm", CultureInfo.InvariantCulture);
DateTime newDate = DateTime.ParseExact("20150620 0800", "yyyyMMdd HHmm", CultureInfo.InvariantCulture);
如果无法更改此输入数据(例如,从数据库中),只需执行子字符串操作,在分钟和小时之间插入一个空格,以便.NET可以判断哪个是:
var text = "20150620 800";
DateTime newDate = DateTime.ParseExact(text.Insert(text.Length - 2, " "), "yyyyMMdd H mm", CultureInfo.InvariantCulture);
用于获取自定义字符串并将其转换
根据MSDN:
如果格式是不包含日期或日期的自定义格式模式
时间分隔符(如“yyyyMMdd HHmm”)使用不变区域性
用于提供程序参数和每个自定义格式的最宽形式
说明符。例如,如果要在格式中指定小时
模式,指定较宽的形式“HH”,而不是较窄的形式,
“H”
除非更改输入数据,否则无法进行此转换
你会认为这是可行的:(在写这篇文章时,这让我有点困惑)
但是由于H
必须是最宽的形式,它必须是HH
,因为它认为80
超出了小时测量的范围。您需要在8
和00
之间添加一个空格,或者在8
之前添加一个0
这些解决方案将起作用:
DateTime newDate = DateTime.ParseExact("20150620 8 00", "yyyyMMdd H mm", CultureInfo.InvariantCulture);
DateTime newDate = DateTime.ParseExact("20150620 0800", "yyyyMMdd HHmm", CultureInfo.InvariantCulture);
如果无法更改此输入数据(例如,从数据库中),只需执行子字符串操作,在分钟和小时之间插入一个空格,以便.NET可以判断哪个是:
var text = "20150620 800";
DateTime newDate = DateTime.ParseExact(text.Insert(text.Length - 2, " "), "yyyyMMdd H mm", CultureInfo.InvariantCulture);
字符串格式与日期时间格式不匹配。您应该手动将其转换为非标准日期时间字符串,因此您需要定义实际格式,然后使用
ParseExact
您的字符串格式与日期时间格式不匹配。你应该手动转换它,这不是一个标准的日期时间字符串,所以你需要定义实际的格式,然后使用ParseExact
这不起作用,我提出了同样的解决方案,但不知道为什么<代码>字符串未被识别为有效的日期时间。即使使用正确的日期创建日期时间,并使用该格式调用ToString
也会返回OP想要的结果。这不起作用,我提出了相同的解决方案,但无法找出原因<代码>字符串未被识别为有效的日期时间。即使使用正确的日期创建日期时间并使用该格式调用ToString
也会返回OP想要的结果。使用第二种解决方案感觉更好。只需放入text.Replace(“,“0”)
而不是insert。感觉更好:)使用第二种解决方案感觉更好。只需放入text.Replace(“,“0”)
而不是insert。只是感觉好多了:)