Unix time conversions in C#
本问题已经有最佳答案,请猛点这里访问。
我正试图用Unix时间获得格林尼治标准时间。我使用以下代码:
1 2 3 4 5 6 7 8 9 | <wyn> public static long GetGMTInMS() { var unixTime = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (long)unixTime.TotalMilliseconds; } </wyn> |
要将Unix时间转换回dattime对象,我使用以下方法:
1 2 3 4 5 6 7 8 | <wyn> public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) { System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime(); return dtDateTime; } </wyn> |
号
当我运行它时,
很好。这是我运行代码的正确时间。我遇到的问题是,当我尝试将
另一个问题是,我在东部时区。这返回了我时区的时间。这是
"Unix timestamp"means second since the epoch in most situation rather than millesconds…小心点!然而,像爪哇一样的东西,使用了"从上到下"的毫秒,这也许是你实际在乎的东西——你所要的工具。这完全取决于你需要什么。
另外,你不应该在本地时间做任何事情。通用时间表。
我会:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static long GetCurrentUnixTimestampMillis() { return (long) (DateTime.UtcNow - UnixEpoch).TotalMilliseconds; } public static DateTime DateTimeFromUnixTimestampMillis(long millis) { return UnixEpoch.AddMilliseconds(millis); } public static long GetCurrentUnixTimestampSeconds() { return (long) (DateTime.UtcNow - UnixEpoch).TotalSeconds; } public static DateTime DateTimeFromUnixTimestampSeconds(long seconds) { return UnixEpoch.AddSeconds(seconds); } |
从1970年1月1日起,大学时间是第二次,不是毫秒。将代码改为使用次数大于毫秒,并应加以实施,