如何将 Long 类型的 datetime 转换为具有正确时区的 DateTime
Posted
技术标签:
【中文标题】如何将 Long 类型的 datetime 转换为具有正确时区的 DateTime【英文标题】:How to convert Long type datetime to DateTime with correct time zone 【发布时间】:2011-06-25 06:40:41 【问题描述】:例如 1297380023295
应该是 2010/2/11 9 AM
我现在使用这个代码
long dateNumber = num;
long beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
DateTime dateValue = new DateTime(beginTicks + dateNumber * 10000);
return dateValue;
这个函数的结果是凌晨 1 点,它是格林威治标准时间。 我能用它做什么?
【问题讨论】:
【参考方案1】:你可以使用DateTimeOffset
中的static
方法。
DateTimeOffset.FromUnixTimeSeconds()
DateTimeOffset.FromUnixTimeMilliseconds()
取决于您的刻度线采用哪种格式。
如果你想要DateTime
,你可以使用例如
var ticks = 1635091250;
var dateTime = DateTimeOffset.FromUnixTimeSeconds(ticks).DateTime;
【讨论】:
【参考方案2】:Powershell 脚本片段,仅供参考
$minDate = New-Object "System.DateTime"
$minDate = $minDate.AddYears(1969)
$minDate.AddMilliseconds(1446616420947)
【讨论】:
【参考方案3】:您正在寻找ToLocalTime()
方法:
long unixDate = 1297380023295;
DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime date= start.AddMilliseconds(unixDate).ToLocalTime();
【讨论】:
我发现下面的链接更有用***.com/a/6156193/3728916 @ImranNaqvi:该方法需要 .Net 滴答声,而不是 Unix 时间戳。 @SLaks +1 进行更正谢谢你是对的,你能指导我如何使用你的代码只获取日期部分 @ImranNaqvi:您正在寻找.Date
属性。
@SLaks - 是的,我发现它使用 DateTime myDate = DateTime.FromOADate(Convert.ToDouble(rd[0])); string mydate2 = myDate.ToString("dd/MM/yyyy");【参考方案4】:
long a= 634792557112051692;
//a= ticks time
DateTime dt = new DateTime(a);
Response.Write(dt.Hour.ToString());
//dt.hour convert time ticks to time hour
【讨论】:
【参考方案5】:您可以在创建新的 DateTime 对象时指定 DateTimeKind,因此您可以将其指定为 UTC,然后使用 .ToLocalTime 将其转换为本地时间:
long dateNumber = 1297380023295;
long beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
DateTime dt = new DateTime(beginTicks + dateNumber * 10000, DateTimeKind.Utc);
MessageBox.Show(dt.ToLocalTime().ToString());
【讨论】:
如何将DateTime.Parse("22:34")
转换为long
以上是关于如何将 Long 类型的 datetime 转换为具有正确时区的 DateTime的主要内容,如果未能解决你的问题,请参考以下文章