Java时间 日期 总结

获取当前时间

new Date()

Calendar calendar= Calendar.getInstance();

calendar.getTime()

LocalDateTime.now()

System.currentTimeMillis(); // 毫秒

Instant.now()

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().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();

时间戳转时间

    LocalDateTime localDateTime2 = Instant.now().atZone(ZoneId.systemDefault()).toLocalDateTime();
    Instant.ofEpochSecond(100).atZone(ZoneId.systemDefault()).toLocalDateTime();

前台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();


时区

img

posted @ 2020-12-01 15:55  Herenwei_Wayne  阅读(125)  评论(0编辑  收藏  举报