指地球上的一块区域使用的同一时间定义,以经度划分,每个时区横跨15经度,总共24个时区,东西各12个时区。
GMT 地区:英国 皇家格林尼治天文台 时区:UTC/GMT 0 (零时区)
UTC与格林威治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同,UTC与GMT基本上等同,误差不超过0.9秒
指格林威治时间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