java - 用两个字节存储日期

标签 java encoding binary

我最近看到一个关于二进制编码的讨论,给出的例子是以两个字节存储 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/

相关文章:

python - 为什么使用使用 utf-8 编码的 Windows txt 文件时会出现 Json 的 ValueError 错误?

javascript - 在 URL 中使用 Crockford 的基数 32 作为 ID?

c++ - 从二进制文件 C++ 中读取值时出错

java - CVS无法将项目下载到指定目录

java - ArrayAdapter 中 onCreateViewHolder 中的 NullPointerException

java - 使用 SQLite 处理 POJO 的 DAO 创建的更好模式

java - 如何在保留所有 "."的同时将字节数组转换为字符串?

Delphi 字符现在以 2 个字节而不是 1 个字节存储在类型化二进制文件中。我怎样才能继续阅读我的旧文件?

Python freeze.py生成的bin无法运行

java - 将 json 数组数据填充到 android 动态微调器中