C# 如何将任何格式的字符串转换为DateTime
我在Excel中有一个C# 如何将任何格式的字符串转换为DateTime,c#,excel,datetime,datatable,C#,Excel,Datetime,Datatable,我在Excel中有一个DateTime作为string格式不同的。我想使用c#将字符串格式转换为日期时间。但我得到了以下例外: 字符串未被识别为有效的日期时间 期望值: 2019年9月20日17:25:59 实际值: System.FormatException 您可以使用DateTime.ParseExact 如果excel表格中的格式数量有限,则可以使用DateTime.TryParseExact()对其进行测试,如果返回成功,则可以使用解析后的DateTime,该DateTime将通过ou
DateTime
作为string
格式不同的。我想使用c#将字符串
格式转换为日期时间
。但我得到了以下例外:
字符串未被识别为有效的日期时间
期望值:
2019年9月20日17:25:59
实际值:
System.FormatException
您可以使用
DateTime.ParseExact
如果excel表格中的格式数量有限,则可以使用
DateTime.TryParseExact()
对其进行测试,如果返回成功,则可以使用解析后的DateTime,该DateTime将通过out
参数获得。可以使用DateTime.ParseExact
如果excel表格中的格式数量有限,则可以使用DateTime.TryParseExact()
对其进行测试,如果返回成功,则可以使用解析后的日期时间,该日期时间将通过out
参数获得。首先,没有通用格式,因为日期表示不明确,一个经典的例子是
01/02/03 == 2 Jan 2003 (USA)
01/02/03 == 1 Feb 2003 (Russia)
01/02/03 == 3 Feb 2001 (China)
如果您有一个预期格式的集合,您可以尝试ParseExact
,例如
string[] possibleFormats = new[] {
"MM'/'dd'/'yyyy HH:mm:ss", // USA
"dd'.'MM'.'yyyy HH:mm:ss", // Russia
"yyyy'-'MM'-'dd HH:mm:ss", // China
"yyyy'-'MM'-'dd'T'HH:mm:ss", // ISO 8601
};
string value = @"09/20/2019 17:25:59";
DateTimeOffset result = DateTimeOffset.ParseExact(
value,
possibleFormats,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal);
首先,没有通用的格式,因为日期表示是不明确的,一个经典的例子是
01/02/03 == 2 Jan 2003 (USA)
01/02/03 == 1 Feb 2003 (Russia)
01/02/03 == 3 Feb 2001 (China)
如果您有一个预期格式的集合,您可以尝试ParseExact
,例如
string[] possibleFormats = new[] {
"MM'/'dd'/'yyyy HH:mm:ss", // USA
"dd'.'MM'.'yyyy HH:mm:ss", // Russia
"yyyy'-'MM'-'dd HH:mm:ss", // China
"yyyy'-'MM'-'dd'T'HH:mm:ss", // ISO 8601
};
string value = @"09/20/2019 17:25:59";
DateTimeOffset result = DateTimeOffset.ParseExact(
value,
possibleFormats,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal);
您可以使用“任意”格式,您需要精确地指定它,尽管您可以指定。您事先知道每个值的格式吗?使用适当的格式使用
ParseExact
。或者将与此ofrmat对应的CultureInfo
对象作为第二个参数传递,例如Parse(“…”,CultureInfo.GetCultureInfo(“en-US”)
Excel和datatable
标记与此问题有什么关系?Excel以本机方式存储日期,这意味着它们可以直接读取为DateTime
。实际问题是什么?我复制粘贴了你的代码,没有发现任何问题。似乎您的PC日期格式可能与您试图解析的内容不同。在这种情况下,您应该使用ParseExact。如果您可以使用“任意”格式,您需要准确地指定它,尽管您可以指定。您事先知道每个值的格式吗?使用适当的格式使用ParseExact
。或者将与此ofrmat对应的CultureInfo
对象作为第二个参数传递,例如Parse(“…”,CultureInfo.GetCultureInfo(“en-US”)
Excel和datatable
标记与此问题有什么关系?Excel以本机方式存储日期,这意味着它们可以直接读取为DateTime
。实际问题是什么?我复制粘贴了你的代码,没有发现任何问题。似乎您的PC日期格式可能与您试图解析的内容不同。在这种情况下,您应该使用ParseExact