如何将 unix 时间戳转换为日期时间
how convert unix timestamp to datetime
我正在尝试转换这个 unix 时间戳
1415115303410
在 DateTime 中,以这种方式:
private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp);
return dtDateTime;
}
但是我得到了错误的日期:
日期:{04/11/004500:00:00}
注意:dtDateTime.AddSeconds(unixTimeStamp) 抛出异常。我的数字以毫秒为单位。
使用这个在线转换工具 http://www.epochconverter.com/ 我得到了正确的转换:
2014 年 4 月 11 日 15:35:03 GMT+0:00
如何转换这个?
使用 AddSeconds 而不是 AddMilliseconds
private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddSeconds(unixTimeStamp);
return dtDateTime;
}
public DateTime FromUnixTime(long unixTime)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return epoch.AddMilliseconds(unixTime);
}
var date = FromUnixTime(1415115303410); // 11/4/2014 3:35:03 PM
由于您的数字以毫秒为单位,Unix time,请使用 AddMilliseconds
。
您的代码按原样运行良好。这里有一个fiddle.
每个告诉您使用 AddSeconds
的人都是错误的。您给我们的数字显然是以毫秒为单位的。一年有 31,536,000 秒。 1415115303410 除以 31536000 是 4487。自 1/1/1970 以来还没有过去 4,487 年。
试试这个
DateTime date = new DateTime(Convert.ToInt64("1415115303410"));
只需使用 DateTimeOffset
DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(1415115303410)
日期到时间戳
DateTime date = DateTime.ParseExact(date_string, "dd/MM/yyyy H:mm:ss", null);
Double timestamp = Math.Truncate((date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
迄今为止的时间戳
DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Unspecified);
dtDateTime = dtDateTime.AddSeconds(Double.Parse(arrayFinalResponse[i, 5])).ToLocalTime();
String date = dtDateTime.ToString("dd/MM/yyyy H:mm:ss", CultureInfo.GetCultureInfo("en-US"));
微软继续为我们着想!添加 seconds/milliseconds 的所有解决方案均不适用于 Visual Studio 2017 (.Net 4.6.1)。但是有一个新的解决方案:
public static DateTime numStrToDate(String val)
{
DateTime dRet = new DateTime(1970, 1, 1, 0, 0, 0, 0);
long dSec;
if (long.TryParse(val, out dSec))
{
TimeSpan ts = new TimeSpan(dSec*10l);
dRet = dRet.Add(ts);
}
return dRet;
}
如果您需要 UTC 时间 - 只需将 'System.DateTimeKind.Utc' 添加到 DateTime 构造函数调用中。
您可以通过 date 命令使用一些小技巧来进行转换。
这确实取决于您的时区。我住在 UTC + 1,所以对我来说是这样的:
h1x1binax:~ # date -d "Thu Jan 1 01:00:00 CET 1970 + 1415115303410 second"
Thu Mar 21 09:16:50 CET 46813
h1x1binax:~ #
所以这不是 unixtime 时间戳...它可能以毫秒为单位,因此需要除以 1000
h1x1binax:~ # date -d "Thu Jan 1 01:00:00 CET 1970 + 1415115303 second"
Tue Nov 4 16:35:03 CET 2014
h1x1binax:~ #
我正在尝试转换这个 unix 时间戳 1415115303410 在 DateTime 中,以这种方式:
private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp);
return dtDateTime;
}
但是我得到了错误的日期: 日期:{04/11/004500:00:00}
注意:dtDateTime.AddSeconds(unixTimeStamp) 抛出异常。我的数字以毫秒为单位。
使用这个在线转换工具 http://www.epochconverter.com/ 我得到了正确的转换:
2014 年 4 月 11 日 15:35:03 GMT+0:00
如何转换这个?
使用 AddSeconds 而不是 AddMilliseconds
private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddSeconds(unixTimeStamp);
return dtDateTime;
}
public DateTime FromUnixTime(long unixTime)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return epoch.AddMilliseconds(unixTime);
}
var date = FromUnixTime(1415115303410); // 11/4/2014 3:35:03 PM
由于您的数字以毫秒为单位,Unix time,请使用 AddMilliseconds
。
您的代码按原样运行良好。这里有一个fiddle.
每个告诉您使用 AddSeconds
的人都是错误的。您给我们的数字显然是以毫秒为单位的。一年有 31,536,000 秒。 1415115303410 除以 31536000 是 4487。自 1/1/1970 以来还没有过去 4,487 年。
试试这个
DateTime date = new DateTime(Convert.ToInt64("1415115303410"));
只需使用 DateTimeOffset
DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(1415115303410)
日期到时间戳
DateTime date = DateTime.ParseExact(date_string, "dd/MM/yyyy H:mm:ss", null);
Double timestamp = Math.Truncate((date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
迄今为止的时间戳
DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Unspecified);
dtDateTime = dtDateTime.AddSeconds(Double.Parse(arrayFinalResponse[i, 5])).ToLocalTime();
String date = dtDateTime.ToString("dd/MM/yyyy H:mm:ss", CultureInfo.GetCultureInfo("en-US"));
微软继续为我们着想!添加 seconds/milliseconds 的所有解决方案均不适用于 Visual Studio 2017 (.Net 4.6.1)。但是有一个新的解决方案:
public static DateTime numStrToDate(String val)
{
DateTime dRet = new DateTime(1970, 1, 1, 0, 0, 0, 0);
long dSec;
if (long.TryParse(val, out dSec))
{
TimeSpan ts = new TimeSpan(dSec*10l);
dRet = dRet.Add(ts);
}
return dRet;
}
如果您需要 UTC 时间 - 只需将 'System.DateTimeKind.Utc' 添加到 DateTime 构造函数调用中。
您可以通过 date 命令使用一些小技巧来进行转换。 这确实取决于您的时区。我住在 UTC + 1,所以对我来说是这样的:
h1x1binax:~ # date -d "Thu Jan 1 01:00:00 CET 1970 + 1415115303410 second"
Thu Mar 21 09:16:50 CET 46813
h1x1binax:~ #
所以这不是 unixtime 时间戳...它可能以毫秒为单位,因此需要除以 1000
h1x1binax:~ # date -d "Thu Jan 1 01:00:00 CET 1970 + 1415115303 second"
Tue Nov 4 16:35:03 CET 2014
h1x1binax:~ #