使用java代码完成 64位时间戳转换32位时间戳
思路是先将64位时间戳转换成二进制,然后取前32位做为新的二进制数,再算出32位的时间戳,有个注意点是:这样的时间戳的长度是10位,如果使用java的data进行时间转换的话,会出现大概只到1970的时间,原因是java的时间戳精度较高,是精确到毫秒的,长度为13位,只需要在算出的32位时间戳后边乘上1000即可。代码如下:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//64位时间戳转换32位时间戳
public class Demo5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入64位时间戳:");
long input = sc.nextLong();
int[] a = zhuanhuan(input);
int x = jieguo(a);
System.out.println("32位时间戳为: "+x);
// Long timeStamp = System.currentTimeMillis(); //获取当前时间戳
// System.out.println(timeStamp);
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long yy =(long) x*1000;
Date date = new Date(yy);
res = simpleDateFormat.format(date);
System.out.println(res);
}
public static int[] zhuanhuan(long input){
int[] erjinzhi64 = new int[64];
int j = 0;
for (int i = 63;i>=0;i--){
if (input>= Math.pow(2,i)){
input -= Math.pow(2,i);
erjinzhi64[j] = 1;
}else{
erjinzhi64[j] = 0;
}
j++;
}
return erjinzhi64;
}
public static int jieguo(int[] erjinzhi64){
int shijianchuo32 = 0;
int[] erjinzhi32 = new int[32];
for (int i = 0;i<32;i++){
erjinzhi32[i] = erjinzhi64[i];
}
int y = 31;
for (int j =0;j<32;j++){
if (erjinzhi32[j]==1){
shijianchuo32 += (int)Math.pow(2,y);
}
y--;
}
return shijianchuo32;
}
}