我正在尝试将微秒转换为日期时间。请找到下面的代码,
长微秒= 1632489907280;//
long microSecs = 1650391805000000//不工作——它也有纳秒。
DateTimeOffset utc = DateTimeOffset.FromUnixTimeMilliseconds(microSecs).UtcDateTime;
return utc.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
有人能帮我解决这个问题吗?
尝试使用以下格式:
yyyy-MM-ddTHH:mm:ss.ffffffZ
格式为.fff
,单位为毫秒。您的示例1632489907280
也是以毫秒为单位的,因此它工作得很好。但在另一种情况下,毫秒的单位是微秒,所以前一种格式不再工作了。你需要6个f
符号来处理微秒。
为什么第一个输入工作,第二个输入不工作?
DateTime
类没有内置的方法来处理epoc微秒
在你的第一个例子中,1632489907280
在milliseconds
的范围内,所以DateTimeOffset.FromUnixTimeMilliseconds()
认为1632489907280
是毫秒而不是微秒。
1650391805000000
大于最大毫秒范围。
从MSDN文档,DateTime.FromUnixTimeMilliseconds(milliseconds)
抛出一个ArgumentOutOfRangeException
如果
毫秒小于-62,135,596,800,000.
或者
milliseconds>253,402,300,799,999.
要修复错误,将您的微秒转换为毫秒,然后传递给DateTime.FromUnixTimeMilliseconds(milliseconds)
。
试试下面的代码,
public static string ProcessEpocTime(long microSecs)
{
//Convert microseconds to Milliseconds.
long milliSecs = (long)microSecs / 1000;
DateTimeOffset utc = DateTimeOffset.FromUnixTimeMilliseconds(milliSecs).UtcDateTime;
return utc.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
}
<子>注意:此解决方案适用于有效的微秒值。子>
尝试在线