我最近看到一个关于二进制编码的讨论,给出的例子是以两个字节存储 Java Date
对象的日期部分(日、月和年)。我现在正在尝试理解演讲中的代码片段:
long time = new Date().getTime(); // time in ms since epoch
time /= 86400000; // ms in a day
byte a = (byte)(time >>> 8);
byte b = (byte)(time);
现在我缺少的一点是,将这两个字节转换回原始日期的日、月和年显然是多么“简单”。如果我们将原始时间值也保留为一个字节,我也不确定为什么要使用两个字节。
有人可以解释一下这是怎么可能的吗?我明白上面的代码在做什么,只是不知道如何恢复原始日期。
更新
这是演讲,有问题的幻灯片是 20/21
http://www.slideshare.net/jtdavies/turn-your-xml-into-binary-java-one-2014
最佳答案
这里是如何从字节中恢复日期:
long time = new Date().getTime(); // time in ms since epoch
time /= 86400000; // ms in a day
byte a = (byte) (time >>> 8);
byte b = (byte) (time);
time = a;
time = time << 8;
time = time | b;
time *= 86400000;
System.out.println(new Date(time));
但是,不幸的是,这并不总是有效,因为由于 daylight savings,日子并不总是 86400000 毫秒长和 leap seconds .
关于java - 用两个字节存储日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034085/