强大易用的日期和时间库 线程安全 Joda Time

https://www.ibm.com/developerworks/cn/java/j-jodatime.html

不可变性

我在本文讨论的 Joda 类具有不可变性,因此它们的实例无法被修改。(不可变类的一个优点就是它们是线程安全的)

Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。

Joda-Time主要的特点包括:

1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。

2. 易于扩展:JDK支持多日历系统是通过Calendar的子类来实现,这样就显示的非常笨重而且事实 上要实现其它日历系统是很困难的。Joda-Time支持多日历系统是通过基于Chronology类的插件体系来实现。

3. 提供一组完整的功能:它打算提供 所有关系到date-time计算的功能.Joda-Time当前支持8种日历系统,而且在将来还会继续添加,有着比JDK Calendar更好的整体性能等等。

附上几个例子:

1、创建任意时间对象

Java代码  

  1. //jdk
  2. Calendar calendar=Calendar.getInstance();
  3. calendar.set(2012, Calendar.NOVEMBER, 15, 18, 23,55);
  4. //Joda-time
  5. DateTime dateTime=new DateTime(2012, 12, 15, 18, 23,55);

2、计算两日期相差的天数

Java代码  

  1. //jdk
  2. Calendar start = Calendar.getInstance();
  3. start.set(2012, Calendar.NOVEMBER, 14);
  4. Calendar end = Calendar.getInstance();
  5. end.set(2012, Calendar.NOVEMBER, 15);
  6. long startTim = start.getTimeInMillis();
  7. long endTim = end.getTimeInMillis();
  8. long diff = endTim-startTim;
  9. int days=(int) (diff/1000 / 3600 / 24);
  10. //joda-time
  11. LocalDate start=new LocalDate(2012, 12,14);
  12. LocalDate end=new LocalDate(2012, 12, 15);
  13. int days = Days.daysBetween(start, end).getDays();

3、获取18天之后的某天在下个月的当前周的第一天日期

Java代码  

  1. //jdk
  2. Calendar current = Calendar.getInstance();
  3. current.add(Calendar.DAY_OF_MONTH, 18);
  4. current.add(Calendar.MONTH, 1);
  5. ......
  6. DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  7. Date date = current.getTime();
  8. String dateStr = dateFormat.format(date);
  9. System.out.println(dateStr);
  10. //joda-time
  11. String dateStr = new DateTime().plusDays(18).plusMonths(1)
  12. .dayOfWeek().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss");
  13. System.out.println(dateStr);

4、时间格式化

Java代码  

  1. DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
  2. //时间解析
  3. DateTime dateTime = DateTime.parse("2012-12-21 23:22:45", format);
  4. //时间格式化,输出==> 2012/12/21 23:22:45 Fri
  5. String string_u = dateTime.toString("yyyy/MM/dd HH:mm:ss EE");
  6. System.out.println(string_u);
  7. //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五
  8. String string_c = dateTime.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);
  9. System.out.println(string_c);

5、与JDK互操作

Java代码  

    1. //通过jdk时间对象构造
    2. Date date = new Date();
    3. DateTime dateTime = new DateTime(date);
    4. Calendar calendar = Calendar.getInstance();
    5. dateTime = new DateTime(calendar);
    6. // Joda-time 各种操作.....
    7. dateTime = dateTime.plusDays(1) // 增加天
    8. .plusYears(1)// 增加年
    9. .plusMonths(1)// 增加月
    10. .plusWeeks(1)// 增加星期
    11. .minusMillis(1)// 减分钟
    12. .minusHours(1)// 减小时
    13. .minusSeconds(1);// 减秒数
    14. // 计算完转换成jdk 对象
    15. Date date2 = dateTime.toDate();
    16. Calendar calendar2 = dateTime.toCalendar(Locale.CHINA);

原文地址:https://www.cnblogs.com/java-zy/p/8488047.html

时间: 2024-10-26 16:54:37

强大易用的日期和时间库 线程安全 Joda Time的相关文章

强大易用的日期和时间库 Joda Time

作为一名开发者,我们不可避免的会使用日期API,如果您使用过JDK的API,或者您会发现JDK的API用的很别扭,尤其是在做日期运算和比较的时候,幸好我们活在开源的世界,也有其他朋友遇到同样的问题,因此joda-time就这样应运而生,jotat-time就是为了简化日期的操作而创建的一个开源项目,正如您期望中的那样,它极大的简化了日期的操作. 日期API的常用使用的几个方面主要有以下几个: A.构造一个日期 B.对日期进行运算和比较 C.日期的格式化输出 A.构造一个日期   基于上面的API

Java 日期、时间类

Java 原本提供了 Date 和 Calendar 用于处理日期.时间的类,包括创建日期.时间对象,获取系统当前日期.时间等操作.但 Date 不仅无法实现国际化,而且它对不同属性也使用了前后矛盾的偏移量,比如月份与小时都是从0开始的,月份中的天数则是从1开始的,年又是从1900开始的,而 java.util.Calendar 则显得过于复杂,从下面介绍中会看到传统 Java 对日期.时间处理的不足.Java8 吸取了 Joda-Time 库(一个被广泛使用的日期.时间库)的经验,提供了一套全

日期与时间

一.PHP日期和时间库 验证日期:checkdate(月,日,年)函数能够很好地验证日期,提供的日期如果有效,则返回true,否则返回false. <?php if (checkdate(2,29,2007)) { echo '日期合法'; } else { echo '日期不合法'; } ?> 格式化时间和日期:date()函数返回根据预定义指令格式化时间和日期的字符串形式.所有格式参数,可以参考手册. <?php echo date('Y-m-d H:i:s');  //直接输入日期

PHP 日期和时间

PHP date() 函数用于对日期或时间进行格式化. PHP Date() 函数 PHP Date() 函数把时间戳格式化为更易读的日期和时间. 语法 date(format,timestamp) 注释:时间戳是一种字符序列,它表示具体事件发生的日期和事件. 获得简单的日期 date() 函数的格式参数是必需的,它们规定如何格式化日期或时间. 下面列出了一些常用于日期的字符: d - 表示月里的某天(01-31) m - 表示月(01-12) Y - 表示年(四位数) 1 - 表示周里的某天

日期和时间(10)

UNIX时间戳 PHP的日期和时间库 验证日期 格式化日期和时间 将时间戳转换用户友好的值 处理时间戳 日期函数 显示本地化的日期和时间 显示网页的最新修改日期 确定当前月份的天数 确定任意给定月份的天数 计算当前日期后X天的日期 DataTime构造函数简介 格式化日期 实例化后设置日期 实例化后设置时间 修改日期和时间 计算两个日期之差 原文地址:https://www.cnblogs.com/xiukang/p/8569894.html

java8新特性之 日期和时间

在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,java.util和java.sql中,都包含Date类,如果要进行时间格式化,还需要java.text.DateFormat类处理.同时java.util.Date中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端.并且也借鉴了第三方日期库joda很多的优点. java.time包下主要包含下面几个主要的类: Instant:时间戳 Duration:持续时间,时间差 Loc

【Java基础08】内部类、枚举类、日期和时间、Math、Random

1 内部类 1.1 概念 大部分时候,类被定义成一个独立的程序单元,在某些情况下,也会把一个类放到另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类被称为外部类. 1.2 作用 1.提供更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. 2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问.但外部类不能访问内部类的实现细节,例如内部类的成员变量. 3.匿名内部类适合用于创建那些仅需要一次使用的类

js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js

日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https://fullcalendar.io/docs/event_data/Event_Object/ https://fullcalendar.io/docs/mouse/eventClick/ <!DOCTYPE html> <html> <head> <meta char

Python工具 | 10个用于处理日期和时间的 Python 库

1??arrow 更好的 Python 日期时间操作类库. 官网 2??Chronyk Python 3 的类库,用于解析手写格式的时间和日期. GitHub 3??dateutil Python datetime 模块的扩展. GitHub 4??delorean 解决 Python 中有关日期处理的棘手问题的库. 官网 5??maya 人性化的时间处理库. GitHub 6??moment 一个用来处理时间和日期的 Python 库.灵感来自于?Moment.js. GitHub 7??pe