【发布时间】:2013-02-20 07:31:16
【问题描述】:
下面的函数应该将下面的 unix 时间转换为 C# DateTime 对象:
1362506086000
上面的时间应该代表2012年3月5日下午12:54。
但是,每次我通过下面的函数运行它时,它都会变为 5:54 PM:
2013 年 3 月 5 日下午 5:54:46
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
}
如何将 unix 时间正确表示为 12:54 而不是 5:54?
【问题讨论】:
-
您可能需要查找将 GMT(或者这些天是 UTC?)转换为本地时间的函数。也许这会有所帮助:stackoverflow.com/questions/5397775/…> 语言可能不同,但所需的函数通常在不同语言中具有相同或非常相似的名称。
-
好问题;我不知道他们发送给我的时区。我只知道它应该是 12:54,当我将它插入我的函数时,它会出现 5:45...
-
@user1477388:在对它进行任何操作之前,您应该始终问自己日期或时间所在的时区。
-
很难知道他们发给我的是哪个时区;我必须知道服务器在哪里,对吗?
-
如果有人向您发送没有时区的日期时间,而您不知道他们是谁或他们在哪里,那么您根本不知道他们的意思是什么,对吧。您要么需要就 UTC 达成一致,要么以 ISO8601 格式发送带有明确偏移的时间。这进入 c# 中的
DateTimeOffset,您可以使用o格式字符串为ToString()和Parse()。
标签: c# datetime unix-timestamp