-4
  public static void main(String[] args){
     Date localRecvTime = new Date();           
     DateFormat converter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
     converter.setTimeZone(TimeZone.getTimeZone("GMT"));           
     String ConvertedDate =converter.format(localRecvTime);
     System.out.println(ConvertedDate.length());
     //above statement will print 24

     byte[] dateInBytes=ConvertedDate.getBytes();
     System.out.println(dateInBytes.length);
     //above statement will also print 24       

    }

上面的代码工作正常。但我想array(ie. byte[] dateInBytes)根据我的要求将字节的大小限制为 4 个字节。有可能这样做吗?

4

2 回答 2

5

首先不要将其转换为字符串。你有一个Date,它实际上是一个 64 位值:自 1970 年 1 月 1 日午夜 UTC 的 Unix 纪元以来的毫秒数。

如果您只有 4 个字节可用,则需要一个 32 位值。如果您将毫秒除以 1000,您将得到自 Unix 纪元以来的秒数......这为您提供了足够的范围来持续到 2038 年。您可以通过有效地更改纪元来进一步显着扩展该范围。如果您使用 2075 的纪元,您应该能够存储大约 2010 到 2140 的值。当然,您仍然只能将值存储到第二个粒度。

或者,您可以坚持以毫秒为粒度,但缩小范围。不幸的是,它会非常显着地减少范围 - 到大约 48 天。除非您期望值在一个非常小的范围内,否则这可能不是您的选择。

计算出 32 位表示后,有多种方法可以将其转换为字节数组,包括使用DataOutputStream. (如果目标是无论如何将值写入流,请不要打扰中间字节数组。)

于 2013-05-17T06:09:56.820 回答
-1

嗯……不,不可能把24个字节变成4个字节

也不可能将 24 个字符放入 4 个字节中(因为字符总是至少与一个字节一样大)。

但我认为 Jon 是对的:自 1970 年以来的秒数将适合 4 个字节。

于 2013-05-17T06:09:42.340 回答