Java----joda Time日期时间工具类

1.介绍

在JDK1.8之前,处理日期和时间的方式比较单一,Java中提供了Calendar来处理日期,但是过程较为繁琐,但是在JDK1.8之后,Java更新了time包提供了LocalDate,LocalTime,LocalDateTime等日期时间类来处理较为复杂的关于日期和时间的业务逻辑的方法。

现有的类(例如java.util.Date和SimpleDateFormatter)是非线程安全的,从而导致用户潜在的并发问题,这不是一般开发人员在编写日期处理代码时会期望处理的问题。

joda Time工具类是值得推荐使用的,其原因在于高效和安全

2.使用

2.1 引入依赖

<dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.0</version>
</dependency>

3.工具类

3.1.DateTime - 不可变的类,用来替换JDK的Calendar类

(1).api:https://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html

(2).常用方法

  • 构造DateTime对象
//构造当前时间
DateTime d1=new DateTime();
DateTime d2=DateTime.now();
//构造指定时间
DateTime d3=new DateTime("2021-01-05T11:36:12");
DateTime d4=new DateTime("2021-01-05");
DateTime d5=new DateTime(1578197532000L);
  • 字符串转时间
//字符串转时间
String time="2020-01-05 12:12:12";
DateTimeFormatter forPattern = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime d5=DateTime.parse(time, forPattern);
DateTime d6=forPattern.parseDateTime(time);
  • 字符串转时间戳
 String time="2020-01-05 12:12:12";
 DateTimeFormatter forPattern = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
 Long time1=DateTime.parse(time, forPattern).toDate().getTime();
 Long time2=forPattern.parseDateTime(time).toDate().getTime();
 Long time3=forPattern.parseDateTime(time).getMillis();
  • 时间转字符串
DateTime date=DateTime.now();
String time=date.toString("yyyy-MM-dd HH:mm:ss");
  • 时间戳转时间
Long time =1578197532000L;
DateTime date=new DateTime(time);
  • 加减
DateTime date=DateTime.now();
//加一年
date.plusYears(1);
//减一年
date.minusYears(1);
//加一天
date.plusDays(1);
//减一天
date.minusDays(1);
date.plusHours(1);
  • 获取一天的开始时间和结束时间
DateTime date=DateTime.now();
//最小时间
DateTime start1=date.withTimeAtStartOfDay();
DateTime start2=date.millisOfDay().withMinimumValue();
//最大时间
DateTime end=date.millisOfDay().withMaximumValue();
  • 两个日期相差多少天,多少月,多少年
DateTime start=new DateTime("2018-12-01");
DateTime end= DateTime.now();
int days = Days.daysBetween(start, end).getDays();
int months = Months.monthsBetween(start, end).getMonths();
int years = Years.yearsBetween(start, end).getYears();

3.2.Instant - 不可变的类,用来表示时间轴上一个瞬时的点

Instant比较适合用来表示一个事件发生的时间戳。不用去关心它使用的日历系统或者是所在的时区(该类中使用1970-01-01 00:00:00开始到未来某一刻的的毫秒总数。)

(1)api

  • 初始化,获取当前系统的毫秒时间的Instant对象
Instant instant=Instant.now();
  • 获取瞬间的毫秒数

 

Instant.now().getMillis()
  • 转DateTime

Instant.now().toDateTime()
  • 当前加时间戳
Instant.now().plus(1111111L)
  • 当前减时间戳
Instant.now().minus(1111111L)
  • 字符串转Instant
Instant.parse("2020-12-12")

3.3.LocalDate - 不可变的类,表示一个本地的日期,而不包含时间部分(没有时区信息)

LocalDate、LocalTime、LocalDateTime方法都是类似的

(1).常用方法

  • 初始化
//当前日期
LocalDate localDate = LocalDate.now();
//指定日期
LocalDate myDate = LocalDate.parse("2020-12-12");
  • 获取日期详情
//获取年
getYear();
//获取月
getMonthOfYear();
//获取天
getDayOfMonth();
  • 日期比较

//是的相等
equals();
//是否晚于
isAfter();
//比较
compareTo();

3.4.LocalTime - 不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息)

3.5.LocalDateTime - 不可变的类,表示一个本地的日期-时间(没有时区信息)


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值