获取当前时间
new Date()
Calendar calendar= Calendar.getInstance();
calendar.getTime()
LocalDateTime.now()
System.currentTimeMillis(); // 毫秒
java.util.Date
Date对象里存的是自格林威治时间( GMT)1970年1月1日0点至Date对象所表示时刻所经过的毫秒数
Sysytem.out.println函数在打印时间时,会取操作系统当前所设置的时区,然后根据这个时区将同毫秒数解释成该时区的时间
new Date()
java.util.Calendar
Calendar类是抽象类型
Calendar cal = Calendar.getInstance();
// 获取年
int year = cal.get(Calendar.YEAR);
java.util.concurrent.TimeUnit
TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep()
java.text.SimpleDateFormat
String timeStr = "2017-8-24 11:17:10"; // 字面时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置北京时区
Date d = sdf.parse(timeStr);
System.out.println(sdf.format(d) + ", " + d.getTime());
输出:2017-08-24 11:17:10, 1503544630000
字母
日期或时间元素
表示
示例
G
Era 标志符
Text
AD
y
年
Year
1996; 96
M
年中的月份
Month
July; Jul; 07
w
年中的周数
Number
27
W
月份中的周数
Number
2
D
年中的天数
Number
189
d
月份中的天数
Number
10
F
月份中的星期
Number
2
E
星期中的天数
Text
Tuesday; Tue
a
Am/pm 标记
Text
PM
H
一天中的小时数(0-23)
Number
0
k
一天中的小时数(1-24)
Number
24
K
am/pm 中的小时数(0-11)
Number
0
h
am/pm 中的小时数(1-12)
Number
12
m
小时中的分钟数
Number
30
s
分钟中的秒数
Number
55
S
毫秒数
Number
978
z
时区
General time zone
Pacific Standard Time; PST; GMT-08:00
Z
时区
RFC 822 time zone
-0800
日期和时间模式
结果
"yyyy.MM.dd G 'at' HH:mm:ss z"
2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"
Wed, Jul 4, '01
"h:mm a"
12:08 PM
"hh 'o''clock' a, zzzz"
12 o'clock PM, Pacific Daylight Time
"K:mm a, z"
0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"
02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"
Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"
010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
2001-07-04T12:08:56.235-0700
java.text.DateFormat
DateFormat df1 = DateFormat.getDateInstance();
DateFormat df2 = DateFormat.getDateTimeInstance();
DateFormat df3 = DateFormat.getTimeInstance();
java.time.Instant
精确到纳秒
Instant 代表的是一个时间,并不包括时区,1970年计算偏移量
实例不可变,可计算,可比较
Instant instant = Instant.now();
System.out.println(instant); # 2020-11-10T08:31:41.475Z
// 现在的时间上加上5个小时4分钟
Instant instant1 = instant.plus(Duration.ofHours(5).plusMinutes(4));
java.time.LocalTime
不带时区的日期
实例不可变,可计算,可比较
java.time.LocalDate
不带时区的日期
实例不可变,可计算,可比较
java.time.LocalDateTime
ISO-8601日历系统中没有时区的日期时间
实例不可变,可计算,可比较
LocalDateTime now = LocalDateTime.now();
now.isBefore();
now.isAfter();
now.format();
now.toLocalDate();
now.plusDays(1);//可能是负数
now.minusDays(1);
now.getDayOfWeek();
now.toEpochSecond(ZoneOffset.of("+8"));// 获取时间戳
时间戳
LocalDateTime.now().
前台UI时间、Java程序时间、Mysql时间
java.sql.Date
java.sql.Time
java.sql.Timestamp
从数据库读取的时间,到了java客户端可能存在不同时间,这里就要设置mysql的时区 serverTimezone=Asia/Shanghai
Instant instant = Instant.parse("2017-05-24T07:56:22Z");
LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();
时区