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