在将微秒转换为datatimeoffset时出现问题



我正在尝试将微秒转换为日期时间。请找到下面的代码,

长微秒= 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微秒

在你的第一个例子中,1632489907280milliseconds的范围内,所以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");
}

<子>注意:此解决方案适用于有效的微秒值。

尝试在线

相关内容

  • 没有找到相关文章

最新更新