我正在尝试简单地将日期格式从数据格式更改为通用时间格式,但它格式错误,就好像我有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“。
希望得到你的建议
答案 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
的偏移日期时间对象,具体取决于位置。