Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将自定义格式的字符串转换为日期时间_C#_Datetime - Fatal编程技术网

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。只是感觉好多了:)