Java获取时间戳

首先,我们需要获取当前时间的毫秒时间戳。在Java中,可以使用System.currentTimeMillis()方法来获取当前时间的毫秒时间戳。

long timestamp = System.currentTimeMillis();
  • 1.

这行代码将获取当前时间的毫秒时间戳并存储在timestamp变量中。

将时间戳转换为4字节的字节数组

接下来,时间戳转换为4字节的字节数组。

这里timestamp是毫秒级别的,所以4个字节的数组不足够存储,所以我们必须把毫秒转换为秒级别

long timestamp = System.currentTimeMillis() / 1000;
  • 1.

我们可以使用Java的位运算符和字节数组来完成这个任务。

byte[] byteArray = new byte[4];
for(int i = 0; i < 4; i++) {
           
           
  byte b = (byte) ((timestamp >> ((3 - i) * 8)) & 0xFF);
  byteArray[i] = b;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

这段代码将创建一个长度为4的字节数组,并使用位运算符将毫秒时间戳分成4个字节,并存储在字节数组中。

最终的代码:

public class TimeUtil {
           
           

    /**
     * 把时间戳转换成4位的byte数组
     * @return byte数组
     */
    public static byte[] transTimestampToBytes(long timestamp) {
           
           
        byte[] byteArray = new byte[4];
        for(int i = 0; i < 4; i++) {
           
           
            byte b = (byte) ((timestamp >> ((3 - i) * 8)) & 0xFF);
            byteArray[i] = b;
        }
        return byteArray;
    }

    /**
     * 把时间戳转换成4位的byte数组
     * @return byte数组
     */
    public static byte[] transTimestampToBytes() {
           
           
        long timestamp = System.currentTimeMillis() / 1000;
        return transTimestampToBytes(timestamp);
    }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

测试代码:

import com.eclink.iot.tcp.virtualdevice.util.TimeUtil;

import java.time.LocalDateTime;
import java.time.ZoneOffset;

public class Test {
           
           

    public static void main(String[] args) {
           
           
        byte[] bytes = TimeUtil.transTimestampToBytes();
        int recover = 0;
        for (int i = 0; i < bytes.length; i++) {
           
           
            int seg = (bytes[i] & 0xFF) << (8 * (3 - i));
            System.out.println("seg = " + seg);
            recover += seg;
        }
        System.out.println("recover: " + recover);
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(recover, 0, ZoneOffset.ofHours(8));
        System.out.println(localDateTime);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

Java时间处理 - 将时间转换为字节数组_时间戳

我们可以看到我们可以把时间戳转换成4字节的数组,并将数组还原回原来的时间