将日期更改为通用时间格式错误地更改了我的日期我无法得到错误

时间:2011-08-08 05:44:14

标签: c# asp.net time format

我正在尝试简单地将日期格式从数据格式更改为通用时间格式,但它格式错误,就好像我有8月7日的日期一样,在将其格式化为通用日期时间后将其更改为8月8日。格式化日期的代码是,

DateVar[runs] = DateTime.Parse(Convert.ToString(output.Tables[0].Rows[runs][0])).ToUniversalTime().ToString();

不要进入代码正确及其循环的一部分,因此“运行”是循环,输出是具有一个表的数据集我在表中的第一个数据是“星期日,2011年8月7日下午10:52 “在实施通用时间格式后,它被转换为”8/8/2011 5:52:00 AM“。

希望得到你的建议

2 个答案:

答案 0 :(得分:4)

世界时不是格式 - 它是一个有效的时区。目前尚不清楚您要尝试做什么,但将“本地”DateTime转换为“通用”DateTime 通常会改变时间。如果您不希望这种情况发生,请不要致电ToUniversalTime

遗憾的是,.NET日期/时间API并不像它那样清晰 - DateTime类型本身有一些可怕的含糊之处。我正在尝试使用Noda Time项目改善这种情况,但您需要了解时区的内容等。

我个人建议只使用DateTime.Parse或仅调用ToString,除非您完全确定默认格式是您想要的。我通常会调用DateTime.ParseExact并指定预期格式(通常为CultureInfo.InvariantCulture,除非它是用户输入的字符串) - 同样我也为ToString调用提供了格式字符串。

在你的代码中,你只是将字符串转换为字符串 - 你想要完成什么?如果您只是想更改格式(例如更改为dd/MM/yyyyTHH:mm:ss),则无需致电ToUniversalTime,但执行需要提供格式字符串。< / p>

我建议你将代码拆分成几个语句来帮助你调试这个(以及一般的代码清晰度):

  • DataTable获取字符串,如果您确实需要(如果它已经是DateTime,那么将它转换为字符串然后再返回就没有意义了)
  • 解析字符串(再次,假设您需要)
  • 执行您需要的所有转化
  • 使用显式格式字符串
  • 格式化DateTime

现在,如果任何单个操作导致问题,您可以更容易地将其隔离。

答案 1 :(得分:1)

如果我从ToUniversalTime()运行Greenwich,它会给出相同的时间,但如果我在其他地方居住的话,它将获得+ or - hours的偏移日期时间对象,具体取决于位置。