【发布时间】:2014-10-26 10:49:13
【问题描述】:
我再次来找你是因为我搜索了所有堆栈并且在找到一些类似的主题之后无论如何没有人在我的情况下工作。我请求你在一件事上支持我。我有这个代码:
static class UnixTime {
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
private static readonly long MaxUnixSeconds = (long)((DateTime.MaxValue - UnixEpoch).TotalSeconds);
private const double LongAdj = 1000.0;
public static DateTime ToDateTime(long unixTimeStamp) { return UnixEpoch.AddSeconds(unixTimeStamp / LongAdj); }
public static long FromDateTime(DateTime date) { return (long)((date - UnixEpoch).TotalSeconds * LongAdj); }
public static void Test(long n) {
System.Diagnostics.Debug.WriteLine("UNIX Time = " + n);
var dt = ToDateTime(n);
System.Diagnostics.Debug.WriteLine("DateTime = " + dt);
var fromDt = FromDateTime(dt);
System.Diagnostics.Debug.WriteLine("UNIX Time = " + fromDt);
System.Diagnostics.Debug.WriteLine("IsGood = " + (n==fromDt));
}
public static void Test() { Test(1300123800440); }
}
它的输出是:
UNIX Time = 1300123800440
DateTime = 3/14/2011 5:30:00 PM
UNIX Time = 1300123800440
IsGood = True
它工作得很好。无论如何,我从上面的代码中提取了我需要传递 datetime 作为参数并获得 Unix 时间戳的代码,不幸的是它给了我不好的结果:
我是这样做的:
public static long ConvertDateTimeTo(string date)
{
const double LongAdj = 1000.0;
DateTime mydate = Convert.ToDateTime(date);
DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return (long)((mydate - UnixEpoch).TotalSeconds * LongAdj);
}
使用:
Console.WriteLine(ConvertDateTimeTo("14.03.2011 5:30 PM"));
输出(应该是 1300123800440)但我正在接收:
1300123800000
你能帮我看看这里出了什么问题吗?
【问题讨论】:
-
预期输入的时区是什么? (你能改变格式吗?)
-
你从哪里得到 440 毫秒?
-
乔恩:UTC。 | UNIX 时间 1300123800440 等于 3/14/2011 5:30:00 PM
-
@Notification 这不是 UNIX 时间,UNIX 时间是经过的秒数,而不是毫秒,即 10 亿秒(10 亿秒大约是 31 年)。
标签: c#