如何在"压缩字节"中获取Java日期格式?

时间:2014-08-31 21:32:30

标签: java smf-forum

我试图手动将论坛用户输入smf数据库,但似乎无法弄清楚如何以正确的格式获取当前日期,我发现这是一种叫做#34的东西;打包字节"。

有人能指点我一些帮助吗?

2 个答案:

答案 0 :(得分:0)

根据IBM的SFM Wiki,“字节打包日期格式”定义为as follows

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)

示例:8月31日。2014 = 0x01 14 244 C

在Java中,您可以使用java.util.Calendar创建包含所有必需值的十六进制字符串,并使用Long.valueOf(...,16)从中获取一个数字。

答案 1 :(得分:0)

如果我正确地解释了你在评论中链接的规范 - 你可以使用字符串格式和解析的组合来获得你需要的东西。我选择使用字符串格式化,因为虽然预期的输出是base-16数字,但它似乎将值编码为base-16数字中的base-10值。

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