我正在尝试手动将论坛用户输入到 smf 数据库中,但似乎无法弄清楚如何以正确的格式获取当前日期,我发现这是一种称为“打包字节”的东西。
谁能给我一些信息来帮忙?
根据 IBM 的 SFM Wiki,“字节压缩日期格式”定义如下:
0x[0C][YY][DDD][+]
where:
C = centuries since 1900 (e.g. 1 for the 21st century)
YY = year
DDD = day (1 for Jan. 1 366 for Dec. 31)
+ = 0xC (Hardcoded)
示例:2014 年 8 月 31 日 = 0x01 14 244 C
在 Java 中,您可以使用java.util.Calendar
创建一个包含所有必需值的十六进制字符串并Long.valueOf(...,16)
从中获取一个数字。
如果我正确解释了您在评论中链接的规范 - 您可以使用字符串格式和解析的组合来获得您需要的内容。我选择使用字符串格式,因为虽然预期的输出是以 16 为基数的数字,但它似乎将值编码为以 16 为基数的数字内的值。
Calendar toPack = Calendar.getInstance();
int century = (toPack.get(Calendar.YEAR) - 1900) / 100;
int year = toPack.get(Calendar.YEAR) % 100;
int dayOfYear = toPack.get(Calendar.DAY_OF_YEAR);
String packedDate = String.format("%02d%02d%03dC", century, year, dayOfYear);
int packed = Integer.parseInt(packedDate, 16);
System.out.printf("0x%x%n", packed);
输出:
0x114238c