核心类

  • 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 获取时间信息 返回值均为int

DateTime 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相关推荐

  1. Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间...

    1.推荐使用java8 localdate等 线程安全 支持较好 地址 2.joda 一.简述 查看SampleDateFormat源码,叙述有: * Date formats are not syn ...

  2. Java的时间类库joda教程

    使用原生Java操作时间是比较麻烦的,比如说简单的创建一个指定时间 String time = "2018-7-3 11:00:00"; SimpleDateFormat sdf ...

  3. java 获取当前日期时间_Java 获取当前日期时间

    Java 当前日期时间教程介绍了各种 Java 类,以获取 Java 中的当前日期时间. 有几种方法可以获取 Java 中的当前日期和时间. Java 程序员可以使用 Java 8(java.time ...

  4. 盘点 20多种基本Java库和API,值得收藏!

    今天给大家收集的一些有用的第三方库,Java开发人员应该掌握,欢迎收藏! 1.单元测试库[JUnit和Mockito] 单元测试是将普通开发人员与优秀开发人员区分开的最重要的事情.经常为程序员提供不编 ...

  5. java calendar类_Java世界最常用的工具类库

    Apache Commons Apache Commons有很多子项目,常用的项目如下 BeanUtils 提供了一系列对java bean的操作,读取和设置属性值等 map和bean的互相转换 我们 ...

  6. 【读书笔记】《代码不朽》

    [<代码不朽>读书笔记] 第一章:简介 "简单"原则: 对每次提交负责. 第二章:函数要短 [要求]<=15行 [做法] 提取方法 替换为方法对象 第三章:逻辑分 ...

  7. Java8新特性——Date Time API

    文章目录 前言 Date Time API 1.Java 8以前日期时间API存在的问题 2.LocalDate/LocalTime/LocalDateTime 3.获取对象的方法 4.获取相关的方法 ...

  8. Elasticsearch 7.x版本重大改变(Breaking changes in 7.x)

    Breaking changes in 7.0 This section discusses the changes that you need to be aware of when migrati ...

  9. java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间

    我试图使用Jodatime显示特定时间段内的交易. 我们的服务器要求开始日期和结束日期为UTC(这可能是显而易见的).因此,围绕它们的任何业务逻辑都使用DateTime对象,时区设置为DateTime ...

最新文章

  1. UIMenuController的使用,对UILabel拷贝以及定制菜单
  2. WINDOWS渗透与提权总结(1)
  3. python pandas读取csv_Python3 pandas怎么读取csv文件的第一行的
  4. 捕获异常_Recover捕获异常
  5. Python小白的数学建模课-05.0-1规划
  6. linux的服务文件,Linux的nfs文件服务
  7. 【NLP】HuggingFace BERT 微博评论情感分类
  8. 【技能】excel小技巧:利用宏制作工资条
  9. 编写一个简单的JavaScript模板引擎
  10. 绿联 蓝牙适配器 linux,绿联USB
  11. 固态硬盘坏了数据能恢复吗?(已解决)
  12. 【鼠标右键点击桌面图标时,出现资源管理器未响应】
  13. 关于tomcat下startup.bat双击闪退的问题
  14. java 怎样设置文本域的字体颜色_java的JTextArea中怎么改变字体颜色
  15. request无法获取到前端发送的form表单数据
  16. 华为python自动化测试框架_10个自动化测试框架,测试工程师用起来
  17. oracle验证公民身份号码
  18. 2036——改革春风吹满地
  19. 四川水利职业技术学院计算机在哪里,四川水利职业技术学院地址在哪里
  20. cin.ignore()的用法

热门文章

  1. Undefined symbols for architecture x86_64: in mac OS
  2. C/C++ 点和箭头操作符的区别
  3. 推荐几款电脑测试软件
  4. java红宝石是哪本_AES Java编码,红宝石解码
  5. 计算机考试工作表怎么做表格步骤,计算机考试Excel表格中换行的方法
  6. 大数据处理系统都有哪些?(批处理系统与迭代计算系统)
  7. 数字时代,企业如何选择适合自己的转型平台?
  8. win10 无法访问samba文件,提示SMB1是不安全协议解决方案
  9. 想在美国开餐厅?想招人?顶级餐饮经营锦囊,300个餐饮人等你来撩!
  10. day13课后总结App