将长度为24的字符串转换为长度为4字节的字节数组

时间:2013-05-17 06:02:10

标签: java

  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个字节。 有可能吗?

2 个答案:

答案 0 :(得分:5)

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

如果您只有4个字节可用,则需要32位值。如果你将毫秒除以1000,那么你将获得自Unix纪元以来的数量......并且这使你有足够的范围可以持续到2038年。你可以通过改变来进一步扩展这个范围这个时代,有效。如果您使用2075年的纪元,您应该能够存储大约2010年到2140年的值。当然,您仍然只会将值存储到第二个粒度。

或者,您可以坚持毫秒作为粒度,但缩小范围。不幸的是,它会显着缩小范围 - 大约48天。除非您期望非常范围内的值,否则可能不适合您。

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

答案 1 :(得分:-1)

嗯......不,不可能将24个字节放入4个字节

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

但我认为乔恩说得对:自1970年以来的秒数将适合4个字节。