Java 时间 GMT UTC UNIX Timestamp 时区

文章目录

    • 时区
    • 格林威治标准时间(GMT)和UTC
    • UNIX时间戳
    • 什么是北京时间?
    • 时间戳和时区有没有关系
    • 编码
    • 控制台输出

时区

指地球上的一块区域使用的同一时间定义,以经度划分,每个时区横跨15经度,总共24个时区,东西各12个时区。

格林威治标准时间(GMT)和UTC

GMT 地区:英国 皇家格林尼治天文台 时区:UTC/GMT 0 (零时区)
UTC与格林威治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同,UTC与GMT基本上等同,误差不超过0.9秒

UNIX时间戳

指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,
注意“现在”这个词,如果是格林威治时间 ,现在指的是格林威治当前的时间,如果是北京时间,现在指的是北京当前的时间

因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的.

这点有利于线上和客户端分布式应用统一追踪时间信息。

ex:
比如我的电脑现在的系统时间为2015年2月27日15点43分0秒,因为我的电脑默认时区为东8区,则0时区的时间为2015年2月27日7点43分0秒,则UNIX时间戳为1425022980秒。

什么是北京时间?

北京时间并不是北京(东经116.4°)的地方时间,而是东经120°的地方时间,故东经120度地方时比北京的地方时早约14分半钟。
因为北京处于国际时区划分中的东八区,同格林尼治时间(世界时)整整相差8小时(即北京时间=世界时+8小时),故命名为“北京时间”

时间戳和时区有没有关系

容易晕乎,其实二者没有关系的,时间戳在哪个时区都是一样的,我们可以通过时间戳和时区去计算当前时区的时间

编码


import java.text.SimpleDateFormat;
import java.util.Date;


public class UNIXTimestamp {
    public static void main(String[] args) {
        // System.currentTimeMillis(),获取本地系统timestamp, 
      	// 获取的时间是以"北京时间",时区为东八区的时间
      	// 也是就是说以系统时间为东八区的时间-(北京时间1970年01月01日08时00分00秒)转化为timestamp
        Long stamp = System.currentTimeMillis() / 1000L;
        // 因此转化也为当前系统时间时区为东八区的时间转化
        String nowDate = tstampToDate(stamp);
        System.out.println(stamp);
        System.out.println(nowDate);
        // 目前已经有了timestamp,当前时区为东八区,如果要获取0时区(也就是伦敦时间)的时间?
        // 只需要-8h
        Long zeroStamp = stamp - 8 * 60 * 60;
        String zeroData = tstampToDate(zeroStamp);
        System.out.println(zeroData);
    }

    public static String tstampToDate(Long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time_Date = sdf.format(new Date(time * 1000L));
        return time_Date;

    }
}

// System.currentTimeMillis(),获取本地系统timestamp,
// 获取的时间是以"北京时间",时区为东八区的时间
// 也是就是说以系统时间为东八区的时间-(北京时间1970年01月01日08时00分00秒)转化为timestamp

Long stamp = System.currentTimeMillis() / 1000L;

// 因此转化也为当前系统时间时区为东八区的时间转化

 String nowDate = tstampToDate(stamp);

// 目前已经有了timestamp,当前时区为东八区,如果要获取0时区(也就是伦敦时间)的时间?
// 只需要-8h

        Long zeroStamp = stamp - 8 * 60 * 60;
        String zeroData = tstampToDate(zeroStamp);
        System.out.println(zeroData);

控制台输出

1612191207
2021-02-01 22:53:27
2021-02-01 14:53:27

你可能感兴趣的:(Java,时间,UNIX,Timestamp,UTC)