最近在做一个java socket程序,用到了,时间转为byte型,并且是转成4个字节的byte型请问该怎么转?
对方给了一个在C中转的例子,如下:时间在报文中是用一个int的数据类型来表示的。常用的几个结构和函数如下:
结构tm.
函数mktime.
以2007--4-17表示,基本步骤如下:
tm t;
t.tm_year = 2007-1900;
t.tm_mon = 3;
t.tm_mday = 17;
t.tm_houre = 0;
t.tm_min = 0;
t.sec = 0;
time_t req_t;
req_t = mktime(&t);
然后将req_t拷贝到报文的相应字段中就行了。返回报文中的时间类型也是一样,从中将时间解析出来,就可以。相关的函数是:localtime()
现在我要用java转,请问如何转?
对方给了一个在C中转的例子,如下:时间在报文中是用一个int的数据类型来表示的。常用的几个结构和函数如下:
结构tm.
函数mktime.
以2007--4-17表示,基本步骤如下:
tm t;
t.tm_year = 2007-1900;
t.tm_mon = 3;
t.tm_mday = 17;
t.tm_houre = 0;
t.tm_min = 0;
t.sec = 0;
time_t req_t;
req_t = mktime(&t);
然后将req_t拷贝到报文的相应字段中就行了。返回报文中的时间类型也是一样,从中将时间解析出来,就可以。相关的函数是:localtime()
现在我要用java转,请问如何转?
import java.util.GregorianCalendar;public class Test { public static void main(String[] args) throws InterruptedException {
Calendar calendar = new GregorianCalendar();
System.out.printf("%1$tF %<tT%n", calendar); byte[] bytes = calendar2Bytes(calendar); calendar = bytes2Calendar(bytes);
System.out.printf("%1$tF %<tT%n", calendar);
}
public static byte[] calendar2Bytes(Calendar calendar) {
int time = (int)(calendar.getTimeInMillis()/1000);
byte[] bytes = new byte[4];
for(int i = bytes.length - 1; i >= 0; i--) {
bytes[i] = (byte)(time & 0xFF);
time >>= 8;
}
return bytes;
}
public static Calendar bytes2Calendar(byte[] bytes) {
int time = (bytes[0] << 24) & 0xFF000000 |
(bytes[1] << 16) & 0xFF0000 |
(bytes[2] << 8) & 0xFF00 |
(bytes[3]) & 0xFF;
Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(time * 1000L);
return calendar;
}
}
Calendar calendar = new GregorianCalendar();
System.out.printf("%1$tF %<tT%n", calendar); byte[] bytes = calendar2Bytes(calendar); calendar = bytes2Calendar(bytes);
System.out.printf("%1$tF %<tT%n", calendar);
这中的printf 这种写法java中有吗?