0 c#
我再次来找你,因为我搜索了所有堆栈,并且发现了一些类似的主题,无论如何没有人在处理我的情况。我请求你在一件事上支持我。我有这个代码:
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); }
}
Run Code Online (Sandbox Code Playgroud)
它的输出是:
UNIX Time = 1300123800440
DateTime = 3/14/2011 5:30:00 PM
UNIX Time = 1300123800440
IsGood = True
Run Code Online (Sandbox Code Playgroud)
它工作得很好。无论如何,我从上面的代码中提取了我需要传递日期时间作为参数并获取 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);
}
Run Code Online (Sandbox Code Playgroud)
使用:
Console.WriteLine(ConvertDateTimeTo("14.03.2011 5:30 PM"));
Run Code Online (Sandbox Code Playgroud)
输出(应该是 1300123800440)但我收到:
1300123800000
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这里出了什么问题吗?
小智 5
你可以试试这个
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now);
Console.ReadLine();
}
public static long ToUnixTimestamp( DateTime target)
{
var date = new DateTime(1970, 1, 1, 0, 0, 0, target.Kind);
var unixTimestamp = System.Convert.ToInt64((target - date).TotalSeconds);
return unixTimestamp;
}
public static DateTime ToDateTime( DateTime target, long timestamp)
{
var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, target.Kind);
return dateTime.AddSeconds(timestamp);
}
Run Code Online (Sandbox Code Playgroud)
编辑
这对我有用
在这里找到它: http://hassakarn.com/2012/10/10/convert-datetime-to-unix-timestamp-in-c/