时间处理 - Joda
2018-01-06 13:45
561 查看
核心类
DateTime 包含日期和时间LocalDateTime 使用本地时区的日期和时间
LocalDate 使用本地时区的日期
LocalTime 使用本地时区的时间
DateTimeFormat 一个工厂类,专门生成具体的格式化类
DateTimeFormatter 具体的格式化类,提供了print方法将DateTime转换为字符串
Period 计算两个时间之间的差
Years 只关心年的时间差计算类
Months 只关心月的时间差计算类
获取当前时间
包含日期和时间// 特别说明:now方法源码就是new一个DateTime对象并返回 DateTime dateTime1 = DateTime.now(); DateTime dateTime2 = new DateTime(); LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime localDateTime1 = new LocalDateTime();
只包含日期
LocalDate localDate1 = LocalDate.now(); LocalDate localDate1 = new LocalDate();
只包含时间
LocalTime localTime1 = LocalTime.now(); LocalTime localTime1 = new LocalTime();
三者相互转换
DateTime dateTime = new DateTime(1995, 2, 5, 12, 30); LocalDate date = dateTime.toLocalDate(); LocalTime time = dateTime.toLocalTime(); DateTime newDateTime = DateTime.now().withDate(date).withTime(time);
获取指定时间
包含日期和时间// 年 月 日 时 分 秒 DateTime dateTime1 = new DateTime(2018,1,6,12,56,0); LocalDateTime localDateTime = new LocalDateTime(2018,1,6,12,56,0);
只包含日期
LocalDate localDate1 = new LocalDate(2018,12,12);
只包含时间
LocalTime localTime1 = new LocalTime(12,32,21);
格式化时间(时间对象 = > 字符串)
调用toString方法DateTime dateTime = new DateTime(2018,1,6,12,56,0); String dateTimeStr = dateTime.toString("yyyy-MM-dd HH:mm:ss"); System.out.println(dateTimeStr );
使用格式化类
DateTime dateTime = new DateTime(2016,8,18,14,20); DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm"); String dateTimeStr = formatter.print(dateTime); System.out.println(dateTimeStr);
解析字符串(字符串 => 时间对象)
使用格式化类DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); String dateTimeStr = "2017-09-01 23:21:22"; DateTime dateTime = formatter.parseDateTime(dateTimeStr); System.out.println(dateTime);
Joda => JDK
toDate方法DateTime dateTime = DateTime.now(); Date jdkDate = dateTime.toDate(); System.out.println(jdkDate);
JDK => Joda
构造函数DateTime dateTime1 = new DateTime(new Date()); DateTime dateTime2 = new DateTime(Calendar.getInstance()); LocalDateTime localDateTime1 = new LocalDateTime(new Date()); LocalDateTime localDateTime2 = new LocalDateTime(Calendar.getInstance()); LocalDate localDate1 = new LocalDate(new Date()); LocalDate localDate2 = new LocalDate(Calendar.getInstance()); LocalTime localTime1 = new LocalTime(new Date()); LocalTime localTime2 = new LocalTime(Calendar.getInstance());
fromDateFields方法
LocalDateTime.fromDateFields(new Date()); LocalDate.fromDateFields(new Date()); LocalDate.fromDateFields(new Date());
fromCalendarFields方法
LocalDateTime.fromCalendarFields(Calendar.getInstance()); LocalDate.fromCalendarFields(Calendar.getInstance()); LocalTime.fromCalendarFields(Calendar.getInstance());
获取和设置时间
getXXX 获取时间信息 返回值均为intDateTime dateTime = DateTime.now(); System.out.println("年 : " + dateTime.getYear()); System.out.println("月 : " + dateTime.getMonthOfYear()); System.out.println("日 : " + dateTime.getDayOfMonth()); System.out.println("时 : " + dateTime.getHourOfDay()); System.out.println("分 : " + dateTime.getMinuteOfHour()); System.out.println("秒 : " + dateTime.getSecondOfMinute()); System.out.println("毫秒 : " + dateTime.getMillisOfSecond()); // 特别说明:1就是星期一 2就是星期二 以此类推 7就是星期天 System.out.println("星期几 : " + dateTime.getDayOfWeek());
withXXX 设置时间 返回值均为DateTime
不过,需要注意的是,DateTime是不可变类,修改操作是通过创建并返回新对象来实现的,原对象本身不会变。
DateTime dateTime = DateTime.now(); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss")); //修改年份为2017年 System.out.println(dateTime.withYear(2017).toString("yyyy-MM-dd HH:mm:ss")); //修改月份为12月 System.out.println(dateTime.withMonthOfYear(12).toString("yyyy-MM-dd HH:mm:ss")); //修改天数为当月12号 System.out.println(dateTime.withDayOfMonth(12).toString("yyyy-MM-dd HH:mm:ss"));
调整时间为下午3点20
DateTime dateTime = new DateTime(); dateTime = dateTime.withHourOfDay(15).withMinuteOfHour(20); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
三小时五分钟后
DateTime dateTime = new DateTime().plusHours(3).plusMinutes(5); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
下周二上午10点整
DateTime dateTime = new DateTime().plusWeeks(1).withDayOfWeek(2).withMillisOfDay(0).withHourOfDay(10); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
获取当天的0点
//withMillisOfDay直接设置当天毫秒信息,会同时将时分秒等信息进行修改。 DateTime.now().withMillisOfDay(0);
明天最后一刻
millisOfDay()的返回值比较特别,它是一个属性,具体类为DateTime的一个内部类Property,这个属性代表当天毫秒信息,这个属性有一些方法,可以接着对日期进行修改,withMaximumValue就是将该属性的值设为最大值。
DateTime dateTime = new DateTime().plusDays(1).millisOfDay().withMaximumValue(); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
返回值为Property的方法
yearOfCentury dayOfYear monthOfYear dayOfMonth dayOfWeek
本月最后一天最后一刻
DateTime dateTime = new DateTime().dayOfMonth().withMaximumValue().millisOfDay().withMaximumValue(); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
下个月第一个周一的下午5点整
new DateTime().plusMonths(1).dayOfMonth().withMinimumValue()
将时间设为了下个月的第一天
plusDays(6).withDayOfWeek(1)将时间设为第一个周一
一个星期中只有 1 + 6 <= 7
plusDays(6) 如果这个月的第一个星期没有星期一的话,那么加上6天日期一定会在这个月的第二星期范围内,第二个星期一定会有星期一
withDayOfWeek(1) 设置为当前星期的第一天,即星期一
DateTime dateTime = new DateTime().plusMonths(1).dayOfMonth().withMinimumValue().plusDays(6).withDayOfWeek(1) .withMillisOfDay(0).withHourOfDay(17); System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
获取当前日期为星期几
DateTime dateTime = DateTime.now(); String str1 = dateTime.dayOfWeek().getAsShortText(Locale.ENGLISH); //Thu String str2 = dateTime.dayOfWeek().getAsShortText(Locale.CHINA); //星期几 String str4 = dateTime.dayOfWeek().getAsText(Locale.CHINA); //星期几 String str3 = dateTime.dayOfWeek().getAsString(); //6
时间相关计算
plusXXX 时间相加 返回值均为DateTime不过,需要注意的是,DateTime是不可变类,修改操作是通过创建并返回新对象来实现的,原对象本身不会变。
DateTime dateTime = DateTime.now(); // 当前时间 System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss")); // 加上2年 System.out.println(dateTime.plusYears(2).toString("yyyy-MM-dd HH:mm:ss")); //加上12个月 System.out.println(dateTime.plusMonths(12).toString("yyyy-MM-dd HH:mm:ss")); //加上22天 System.out.println(dateTime.plusDays(22).toString("yyyy-MM-dd HH:mm:ss")); //加上2个星期 System.out.println(dateTime.plusWeeks(2).toString("yyyy-MM-dd HH:mm:ss"));
minusXXX 时间相减 返回值均为DateTime
不过,需要注意的是,DateTime是不可变类,修改操作是通过创建并返回新对象来实现的,原对象本身不会变。
DateTime dateTime = DateTime.now(); // 当前时间 System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss")); // 减去2年 System.out.println(dateTime.minusYears(2).toString("yyyy-MM-dd HH:mm:ss")); // 减去12个月 System.out.println(dateTime.minusMonths(12).toString("yyyy-MM-dd HH:mm:ss")); // 减去22天 System.out.println(dateTime.minusDays(22).toString("yyyy-MM-dd HH:mm:ss")); // 减去2个星期 System.out.println(dateTime.minusWeeks(2).toString("yyyy-MM-dd HH:mm:ss"));
计算两个时间之间的差
Period 类(存在bug,数据不准确)
DateTime start = new DateTime(2016,8,18,10,58); DateTime end = new DateTime(2016,9,19,12,3); Period period = new Period(start,end); System.out.println(period.getMonths()+"月"+period.getDays()+"天" +period.getHours()+"小时"+period.getMinutes()+"分");
只关心年 Years类
类似的还有只关心月、只关心日、以此类推
DateTime born = new DateTime(1995, 2, 5, 12, 30); int age = Years.yearsBetween(born, DateTime.now()).getYears(); System.out.println(age);
相关文章推荐
- 使用Joda-Time优雅的处理日期时间
- Joda-Time 简介 让时间处理变得更简单
- Joda-time是java处理时间非常棒的jar
- Logstash学习7_Logstash_Date时间处理_Joda-Time库
- 170804、使用Joda-Time优雅的处理日期时间
- Joda-Time处理时间的学习(比calendar好用)
- springboot读取自己定义的配置文件的方式以及使用joda_time来处理时间日期
- Java|Joda-Time简化时间处理利器
- Java之Joda工具包处理时间的7点总结分享
- Joda-Time 简介 既然无法摆脱时间,为何不设法简化时间处理?
- joda.time 处理时间--计算2个日期之间的天数
- 使用DTSC(Read Time Stamp Counter)指令做高精度时间处理,比QueryPerformanceCounter效率要高出一个数量级
- Mysql前台读取时间为时间戳的处理
- iOS时间处理(NSDate、NSDateComponents、NSCalendar、NSDateFormatter、NSTimeZone)
- JS处理时间相关
- JS处理时间
- python 时间处理
- 【MOOC】数字信号处理-电子科技大学-第二周 - 连续时间信号的数字化处理
- 接口时间处理
- find命令处理指定时间之前的文件命令