在我的应用程序中,我收到时间戳,并在c#代码中转换为日期并传递此日期以执行存储过程。我的应用程序放在服务器机器中。但是当这个日期打印在日志中时,我看到日期在服务器中收到的日期少了一天。下面是我的代码,从时间戳转换为日期,
DateTime fromDate = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
fromDate =fromDate.AddMilliseconds(1430159400000).ToLocalTime();
日期是:'2015-04-28'但是在服务器中它收到'2015-04-27'。这我知道什么时候我在日志中打印这个日期。我在这里做错了什么! 任何建议都是最受欢迎的。
此致 桑杰塔
答案 0 :(得分:1)
目前您正在将UTC时间戳转换为系统本地时间 - 可能您的服务器与您处于不同的时区。
我强烈建议您直接以UTC格式记录UTC时间戳。无论读取,您的日志都可以将其转换为您想要的任何时区的本地时间,但它的便携性更强:
所以,你应该:
ToLocalTime
来电Z
,以便它在UTC中清除。如果您在数据库中存储时间戳,我建议您也将这些时间戳存储在UTC中。 某些种日期/时间值最好以本地时间存储,但时间戳更全局,代表即时,因此UTC是适合用于存储的区域。
答案 1 :(得分:1)
由于您根据Unix time计算DateTime
,因此1430159400000
毫秒(1430159400
秒)生成星期一,2015年4月27日18:30:00 UTC。
由于您使用ToLocalTime
方法计算当地时间,因此会将当前时区偏移量添加到此DateTime
。我强烈怀疑您当前的计算机和服务器有不同的时区,甚至您当前的UTC offset等于或等于+05:30
,这就是为什么您的ToLocalTime
生成属于后一天的本地时间的原因
将DateTime
值记录为Local
可能不明确。你永远不应该这样做。您应该始终将DateTime
存储为UTC
。
请阅读此类处理的最佳做法;