private static final long NANOS_PER_TICK = 100L;
private static final long TICKS_PER_SECOND = 1000000000L / NANOS_PER_TICK;
private static final long YEAR_OFFSET = -62135596800L;
// Seconds from Epoch to 12:00:00 midnight, January 1, 0001, calculated using:
// OffsetDateTime.of(1, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC).toEpochSecond()
3条答案
按热度按时间2fjabf4q1#
最好转换为unix time.net datetimeoffset.tounixtimemillizes,然后使用java.util.date java构造函数对其进行解析
bihw5rsg2#
转换值(例如。
-8586018589234214115
)至DateTime
对象(例如,theDateTimeObject
)使用DateTime.FromBinary(Int64)
转换theDateTimeObject
至DateTimeOffset
作为DateTimeOffset dateTime = DateTime.SpecifyKind(theDateTimeObject, DateTimeKind.Utc)
传递的值DateTimeOffset.ToUnixTimeMilliseconds
进入java.time.Instant#ofEpochMilli
得到一个物体Instant
可以转换为其他日期时间类型。演示:
输出:
注意,api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。在trail:date-time了解有关现代日期时间api的更多信息。注意:无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。
如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
cyej8jka3#
二进制值为:
一个64位有符号整数,用于编码
Kind
属性和Ticks
62位字段中的属性。自从
Kind
财产对我们来说是无用的,我们可以用它来掩盖它value & ((1L << 62) - 1)
为了得到Ticks
财产。勾号是:
一个滴答声代表100纳秒或1千万分之一秒。有
10,000
毫秒内的滴答声(参见TicksPerMillisecond
)一秒钟就有1000万个滴答声。此属性的值表示此后经过的100纳秒间隔数
12:00:00 midnight, January 1, 0001
.也就是说我们可以这样转换:
测试
输出
警告:系统
-8586018589234214115
值指定Kind
的价值2=Local
(表示的时间是本地时间),但我们不知道“本地”时区是什么,因此转换为utc的结果可能是错误的。我们也可以用另一种方式转换:
测试
输出
看到了吗also:java 8 时间-相当于.net datetime.maxvalue.ticks