【问题标题】:DateTime.Parse() works on one machine but not the otherDateTime.Parse() 在一台机器上工作,但在另一台机器上不工作
【发布时间】:2014-12-01 14:50:15
【问题描述】:

我正在使用Parse 方法将string 转换为DateTime 对象:

requestRecord.TerminationDate = DateTime.Parse(reader.ReadString("Termination_Date"));

此代码在一台机器上运行,但在另一台机器上抛出异常。我认为问题可能与当地文化有关。查看两台机器上的任务栏,其中一台抛出异常的日期为01/12/2014,而另一台显示12/01/2014

有没有什么方法可以重写上面的代码,让它在两台机器上都能工作,而不管本地DateTime 文化如何?

【问题讨论】:

  • reader 是什么?你为什么把它读成字符串?
  • @SriramSakthivel,可能是因为BinaryReader 没有ReadDate() 方法?
  • @KirkWoll 你有多确定那个读者是BinaryReaderBinaryReader.ReadString 不接受任何字符串参数。
  • @SriramSakthivel,这是一个很好的观点。

标签: c# .net


【解决方案1】:

我猜两台机器的文化设置不同。尝试提供格式。这就解释了为什么两台机器上的日期格式解释不同:

requestRecord.TerminationDate = DateTime.ParseExact
                                ( reader.ReadString("Termination_Date")
                                , "dd/MM/yyyy"
                                , CultureInfo.InvariantCulture
                                );

通过这种方式,您不再依赖于机器及其设置,而是依赖于您所知道的格式。

根据reader 是什么,您可能想要使用reader.GetDateTime,它已经为您完成了所有这些工作,例如SqlDataReader.GetDateTime

【讨论】:

  • 这在使用美国文化的机器上仍然会失败。他正在阅读本地格式的日期,因此尝试强制 InvariantCulture 在这里无济于事...
  • @toadflakz:OP 并没有告诉它是来自数据库的DateTime,或者他正在阅读,只是一个string。答案都提供了代码修复,作为长期更好的解决方案(如果适用)。
  • 这是完全错误的。 ParseExact 需要 exact 匹配,所以看不出这在多格式情况下如何工作。尝试在 MM/dd/yyyy 和 dd/MM/yyyy 上 ParseExact...
  • @Tigran:他在“查看任务栏”,而不是实际数据。他对问题进行了自我分析,但不知道如何解决。
  • @Sperick:服务器上的数据类型是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多