标准的时间一般长这样子
Wed Oct 19 2022 18:40:04 GMT+0800 (中国标准时间) {}
Wed Oct 19 2022 18:40:04这一坨 翻译过来就是2022/10/19 18:41:13
那么GMT+0800 (中国标准时间) {}表示啥呢?
GMT(格林尼治标准时间(英语:Greenwich Mean Time,GMT)又称格林尼治平均时间)
+800表示中国位于东八区,想起了一部剧
由于GMT计时每年有丢丢误差,目前已经被原子钟报时的协调世界时(UTC)所取代
有兴趣的可了解下夏令时
Epoch Time是计算从1970年1月1日零点(格林威治时区/GMT+00:00)到现在所经历的秒数
java中获取现在时间戳
long l = System.currentTimeMillis();
Date ;java.util.Date;
Date date=new Date();
int year = date.getYear()+1900;
int month = date.getMonth()+1;
int date1 = date.getDate();
System.out.println(date.toString());
System.out.println(date.toLocaleString());
System.out.println(date.toGMTString());
//Wed Oct 19 19:11:34 CST 2022
//2022年10月19日 下午7:11:34
//19 Oct 2022 11:11:34 GMT
格式加工一下
Date date =new Date();
var sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
sout(sdf.format(date))
Calendar
相较于Date,Calendar可以设置时区,做一些简单日期加减
// 简单例子
Calendar c=Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;
int date=c.get(Calendar.Date);
var sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
sout(sdf.format(c.getTime()));//c.getTime()将Calendar转为Date对象
// 自定义
Calendar c=Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR,2022);
c.set(Calendar.MONTH,9);// 10月
c.set(Calendar.DATE,20);
//or 一把梭
c.set(2022,9,20,12,0,0);
System.out.println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(c.getTime()));
//2022-10-20 12:00:00
上面说了Calendar可以设置时区
TimeZone
// 初始化
TimeZone timeZone= TimeZone.getDefault();//系统默认时区,有兴趣打印一下
System.out.println(timeZone.getID());//Asia/Shanghai,亚洲上海
System.out.println(Arrays.deepToString(TimeZone.getAvailableIDs()));//所有可用时区
//[Africa/Abidjan, Africa/Accra, Africa/Addis_Ababa, Africa/Algiers, Africa/Asmara, Africa/Asmera, Africa/Bamako, Africa/Bangui, Africa/Banjul, Africa/Bissau, Africa/Blantyre, Africa/Brazzaville, Africa/Bujumbura.....]一长串.......
//自定义
TimeZone timeZone=TimeZone.getTimeZone("America/Maceio");
//question 已知上海时间,求同一时刻America/Maceio的时间
Calendar c= Calendar.getInstance();
c.clear();
c.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
c.set(2022,9,20,12,0,0);
var sdf =new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("America/Maceio"));
System.out.println(sdf.format(c.getTime()));
// 2022-10-20 01:00:00
// 简单日期运算
c.add(Calendar.DATE,5);
// 2022年10月25日 下午12:00:00