Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# 如何将任何格式的字符串转换为DateTime_C#_Excel_Datetime_Datatable - Fatal编程技术网

C# 如何将任何格式的字符串转换为DateTime

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

我在Excel中有一个
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