java 时间处理_java处理日期和时间

java处理日期和时间

1. jdk API

java.util

Date

Calendar

java.time(jdk>=1.8)

LocalDate

LocalTime

ZonedDateTime

Instant

新API的特点:

严格区分日期,时间

不变类(类似于String)

Month范围1-12(Jan-Dec)

Week范围1-7(Mon-Sun)

2. Date

注意: import java.util而不是importjava.sql

2.1Date对象的主要方法

toString() 把Date对象变成字符串

getTime()把Date对象转换成时间戳

Date now = new Date();

System.out.println(now);

System.out.println(now.toString());// 把now转换成字符形式

System.out.println(now.getTime());// 通过now获取时间戳

结果:

Wed Jun 05 14:03:26 CST 2019

Wed Jun 05 14:03:26 CST 2019

1559714606831

java.util.Date的问题:

不能转换时区

日期和时间的加减

两个日期相差多少天

计算某个月第一个星期一

2.2 SimpleDateFormat

yyyy: 年

MM: 月

dd: 日

HH: 时

mm: 分

ss: 秒

Date now = new Date();

// 把Date按照格式转换成字符串

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(sdf.format(now));

// 把字符串按照格式转换成Date对象

String s1 = "2016-11-20 12:15:35";

Date date1 = sdf.parse(s1);

System.out.println(date1);

3. Calendar(日历)

导入: import java.util.Calendar

// 创建实例

Calendar c = Calendar.getInstance();

int y = c.get(Calendar.YEAR);

int m = c.get(Calendar.MONTH);// 得到的月份比实际月份小1

int d = c.get(Calendar.DAY_OF_MONTH);

int w = c.get(Calendar.DAY_OF_WEEK);

int hh = c.get(Calendar.HOUR_OF_DAY);

int mm = c.get(Calendar.MINUTE);

int ss = c.get(Calendar.SECOND);

int ms = c.get(Calendar.MILLISECOND);

Date date = c.getTime();

// 获得时间戳

long ms1 = c.getTimeInMillis();

Date c.getTime() 获得Date对象

long getTimelnMillis() 获得毫秒数

get(int field) 获得年月日, 时分秒

setTime(Date) 设定时间

setTimeInMillis(long) 根据时间戳设置时间

set(int field, int value) 根据年月日等设定时间

setTimeZone(TimeZone) 更改时区

c.setTimeZone(TimeZone.getTimeZone("America/New_York"))

add(int field, int value)

// +5 day

c.add(Calendar.DAY_OF_MONTH, 5);

// -2 hours

c.add(Calendar.HOUR_OF_DAY, -2);

4. LocalDateTime

4.1 获取当前日期和时间

LocalDate

LocalTime

LocalDateTime

// 当前日期

LocalDate ld = LocalDate.now();

// 当前时间

LocalTime lt = LocalTime.now();

// 当前日期和时间

LocalDateTime ldt = LocalDateTime.now();

// 指定日期和时间

LocalDate ld2 = LocalDate.of(2016, 11, 30);

LocalTime lt2 = LocalTime.of(15, 16, 17);

LocalDateTime ldt2 = LocalDateTime.of(2016, 11, 30, 15, 16, 17);

LocalDateTime ldt3 = LocalDateTime.of(ld2, lt2);

4.2 DateTimeFormatter

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

System.out.println(dtf.format(LocalDateTime.now()));

LocalDateTime dt3 = LocalDateTime.parse("2016-12-30 15:16:17", dtf);

System.out.println(dt3);//2016-12-30T15:16:17

4.3 日期和时间的运算

增加:

plusYears(1): +1年

plusMonths(1): +1月

plusDays(1): +1天

plusHours(1): +1小时

plusMinutes(1): +1 分钟

plusSeconds(1): +1 秒

减少

minusYears(1): +1年

minusMonths(1): +1月

minusDays(1): +1天

minusHours(1): +1小时

minusMinutes(1): +1 分钟

minusSeconds(1): +1 秒

LocalDateTime now = LocalDateTime.now();

LocalDateTime d = now.plusDays(1).minusHours(1);

调整年, 月,日, 时, 分, 秒

withYear(2018): 调整年

withMonth(): 调整月

withDayOfMonth(): 调整为本月的第几天

withDayOfYear(): 调整本年的第几天

withHour(): 调整小时

withMinute(): 调整分钟

withSecond(): 调整秒

判断日期和时间的先后:

isBefore()

isAfter()

equals()

计算两个日期的相差时间:Period

LocalDate d1 = LocalDate.of(2018, 11, 20);

LocalDate d2 = LocalDate.of(2050, 1, 2);

Period p = d1.until(d2);

System.out.println(p);// P31Y1M13D

// 两个日期相差多少天

System.out.println(Math.abs(d1.toEpochDay() - d2.toEpochDay()));// 11366

p.getYears()

p.getMonths()

p.getDays()

5. ZonedDateTime

ZonedDateTime = LocalDateTime + ZoneId

ZonedDateTime: 带时区的日期和时间

ZoneId: 新时区对象(取代就的java.util.TimeZone)

Instant: 时刻对象(内部用long表示epoch seconds)

ZonedDateTime zbj = ZonedDateTime.now();// 当前时区的日期和时间

ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York"));// 纽约时区的日期和时间

// 北京时区变成纽约时区

ZonedDateTime ny = zbj.withZoneSameInstant(ZoneId.of("America/New_York"));

// 把LocalDateTime转换成ZonedDateTime

ZonedDateTime bj = LocalDateTime.now().atZone(ZoneId.systemDefault());

Instant: 对象表示某个时刻

Instant ins1 = Instant.now();

Instant ins2 = ZonedDateTime.now().toInstant();

// 注意是秒

long epoch = ins1.getEpochSecond();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值