Apache Commons Lang之日期时间工具类
码农不识Apache,码尽一生也枉然。
FastDateFormat
FastDateFormat是一个快速且线程安全的时间操作类,它完全可以替代SimpleDateFromat。因为是线程安全的,所以你可以把它作为一个类的静态字段使用。构造方法为protected,不允许直接构造它的对象,可以通过工厂方法获取。FastDateFormat之所以是线程安全的,是因为这个类是无状态的:内部的成员在构造时就完成了初始化,并在对象存活期,不提供任何API供外界修改他们。
getInstance(String pattern)
获取指定日期时间格式的FastDateFormat实例。
format(Date date)
将日期时间格式化为字符串。
FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss").format(new Date());
format(long millis)
同format(Date date)相似。
format(Calendar calendar)
同format(Date date)相似。
DateFormatUtils
将时间转化为字符串的工具类。不可实例化对象且线程安全,依赖于FastDateFormat。
预定义的日期格式
DateFormatUtils预定义的日期格式有如下几种:
public static final FastDateFormat ISO_8601_EXTENDED_DATETIME_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss");
public static final FastDateFormat ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ");
public static final FastDateFormat ISO_8601_EXTENDED_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd");
public static final FastDateFormat ISO_8601_EXTENDED_TIME_FORMAT = FastDateFormat.getInstance("HH:mm:ss");
public static final FastDateFormat ISO_8601_EXTENDED_TIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("HH:mm:ssZZ");
public static final FastDateFormat SMTP_DATETIME_FORMAT = FastDateFormat.getInstance("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
format(Date date, String pattern)
将日期格式化为字符串。
DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"); // 2017-06-03 23:03:53
DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.format(new Date()); // 2017-06-03T23:09:52
DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"); // 2017-06-03 23:16:59
format(long millis, String pattern)
同format(Date date, String pattern)相似。
format(Calendar calendar, String pattern)
同format(Date date, String pattern)相似。
DateUtils
DateUtils提供了很多很方便的功能,减轻了使用Date的复杂性。把原来需用Calendar才能完成的功能统一集中了起来,也就是说没有对应的CalendarUtils类。在JDK中,Date与Calendar概念本身就有些混淆,只是为了保持兼容性才引入的Calendar。相对于Calendar提供的方法,DateUtils提供了更加合理的方法,对时间的单个字段操作变得更加的容易。
常量
public static final long MILLIS_PER_SECOND = 1000; // 1秒钟的毫秒数
public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; // 1分钟的毫秒数
public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; // 1小时的毫秒数
public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; // 1天的毫秒数
boolean isSameDay(Date date1, Date date2)
判断两个日期是否是同一天。
DateUtils.isSameDay(new Date(), new Date()); // true
boolean isSameDay(Calendar cal1, Calendar cal2)
同isSameDay(Date date1, Date date2)相似。
Date parseDate(String str, String… parsePatterns)
解析日期时间字符串日期时间Date对象,通过尝试各种不同的解析器来解析表示日期的字符串。
DateUtils.parseDate("2017-06-03 23:51:44", "yyyy-MM-dd HH:mm:ss"); // 2017-06-03 23:51:44
DateUtils.parseDate("2017年06月03日 23时51分44秒", "yyyy-MM-dd HH:mm:ss", "yyyy年MM月dd日 HH时mm分ss秒");
Date addYears(Date date, int amount)
得到date日期时间后(前)amount年后的日期时间。
Date d3 = DateUtils.addYears(new Date(), 3); // 2020-06-04 00:06:21
Date d3 = DateUtils.addYears(new Date(), -2); // 2015-06-04 00:06:21
Date addMonths(Date date, int amount)
同addYears(Date date, int amount)相似,对月份数进行加减。
Date addWeeks(Date date, int amount)
同addYears(Date date, int amount)相似,对周数进行加减。
Date addDays(Date date, int amount)
同addYears(Date date, int amount)相似,对天数进行加减。
Date addHours(Date date, int amount)
同addYears(Date date, int amount)相似,对小时数进行加减。
Date addMinutes(Date date, int amount)
同addYears(Date date, int amount)相似,对分钟数进行加减。
Date addSeconds(Date date, int amount)
同addYears(Date date, int amount)相似,对秒数进行加减。
Date addMilliseconds(Date date, int amount)
同addYears(Date date, int amount)相似,对毫秒数进行加减。
Date setYears(Date date, int amount)
对给定的日期时间设置年份。
Date d4 = DateUtils.setYears(new Date(), 2028); // 2028-06-04 00:16:48
Date setMonths(Date date, int amount)
同setYears(Date date, int amount)相似,对月数进行设置。
Date setDays(Date date, int amount)
同setYears(Date date, int amount)相似,对天数进行设置。
Date setHours(Date date, int amount)
同setYears(Date date, int amount)相似,对小时数进行设置。
Date setMinutes(Date date, int amount)
同setYears(Date date, int amount)相似,对分钟数进行设置。
Date setSeconds(Date date, int amount)
同setYears(Date date, int amount 大专栏 Apache Commons Lang之日期时间工具类)相似,对秒钟数进行设置。
Date setMilliseconds(Date date, int amount)
同setYears(Date date, int amount)相似,对毫秒数进行设置。
toCalendar(Date date)
将日期转为Calendar实例。
Date round(Date date, int field)
对日期时间进行四舍五入。filed指定取整的字段,可以取的值为
- Calendar.SECOND
- Calendar.MINUTE
- Calendar.HOUR_OF_DAY
- Calendar.DAY_OF_MONTH
- Calendar.MONTH
- Calendar.YEAR
…
// 当前时间为'2017-06-04 00:44:41',则执行以下代码
DateUtils.round(new Date(), Calendar.YEAR); // 2017-01-01 00:00:00
DateUtils.round(new Date(), Calendar.MONTH); // 2017-06-01 00:00:00
DateUtils.round(new Date(), Calendar.HOUR_OF_DAY); // 2017-06-04 01:00:00
DateUtils.round(new Date(), Calendar.DAY_OF_MONTH); // 2017-06-04 00:00:00
DateUtils.round(new Date(), Calendar.HOUR); // 2017-06-04 01:00:00
DateUtils.round(new Date(), Calendar.MINUTE); // 2017-06-04 00:45:00
DateUtils.round(new Date(), Calendar.SECOND); // 2017-06-04 00:44:43
Date truncate(Date date, int field)
从给定字段开始格式化截取日期。对一个时间对象的某个字段进行截断。
// 当前时间为'2017-06-04 00:56:05',则执行以下代码
DateUtils.truncate(new Date(), Calendar.YEAR); // 2017-01-01 00:00:00
DateUtils.truncate(new Date(), Calendar.MONTH); // 2017-06-01 00:00:00
DateUtils.truncate(new Date(), Calendar.HOUR_OF_DAY); // 2017-06-04 00:00:00
DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH); // 2017-06-04 00:00:00
DateUtils.truncate(new Date(), Calendar.HOUR); // 2017-06-04 00:00:00
DateUtils.truncate(new Date(), Calendar.MINUTE); // 2017-06-04 00:56:00
DateUtils.truncate(new Date(), Calendar.SECOND); // 2017-06-04 00:56:05
Date ceiling(Date date, int field)
从给定字段开始“向上”格式化日期。
// 当前时间为'2017-06-04 01:02:31',则执行以下代码
DateUtils.ceiling(new Date(), Calendar.YEAR); // 2018-01-01 00:00:00
DateUtils.ceiling(new Date(), Calendar.MONTH); // 2017-07-01 00:00:00
DateUtils.ceiling(new Date(), Calendar.HOUR_OF_DAY); // 2017-06-04 02:00:00
DateUtils.ceiling(new Date(), Calendar.DAY_OF_MONTH); // 2017-06-05 00:00:00
DateUtils.ceiling(new Date(), Calendar.HOUR); // 2017-06-04 02:00:00
DateUtils.ceiling(new Date(), Calendar.MINUTE); // 2017-06-04 01:03:00
DateUtils.ceiling(new Date(), Calendar.SECOND); // 2017-06-04 01:02:32
long getFragmentInDays(Date date, int fragment)
返回一个指定时间的天数。关键的是参数fragment,它的作用非常重要。它的值必须是Calendar的时间常量字段。
注意:小时必须用24小时制的,即Calendar.HOUR_OF_DAY,而不能用Calendar.HOUR字段。
// 当前时间为'2017-06-04 01:12:31',则执行以下代码
DateUtils.getFragmentInDays(new Date(), Calendar.YEAR); // 155
DateUtils.getFragmentInDays(new Date(), Calendar.MONTH); // 4
long getFragmentInMilliseconds(Date date, int fragment)
同getFragmentInDays(Date date, int fragment)相似。
long getFragmentInSeconds(Date date, int fragment)
同getFragmentInDays(Date date, int fragment)相似。
long getFragmentInMinutes(Date date, int fragment)
同getFragmentInDays(Date date, int fragment)相似。
long getFragmentInHours(Date date, int fragment)
同getFragmentInDays(Date date, int fragment)相似。
boolean truncatedEquals(Date date1, Date date2, int field)
比较日历对应字段是否相等。
StopWatch
StopWatch是一个方便的计时器。
使用示例
StopWatch stopWatch = new StopWatch();
stopWatch.start();
...
stopWatch.stop();
System.out.println(stopWatch.getTime());
主要方法:
start(): 开始计时stop(): 停止计时reset(): 重置计时suspend(): 暂停计时resume(): 继续计时getTime(): 获取消耗的毫秒数getNanoTime(): 获取消耗的纳秒数getStartTime(): 获取开始的毫秒数isStarted(): 是否开始isSuspended(): 是否暂停isStopped(): 是否停止
Apache Commons Lang之日期时间工具类的更多相关文章
- 基于Java8的日期时间工具类DateTimeFormatter
原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...
- java基础之日期时间工具类
package zy.test; import java.sql.Timestamp; import java.text.ParseException; import java.text.ParseP ...
- 【Hutool】Hutool工具类之日期时间工具——DateUtil
一.用于取代Date对象的DateTime对象 再也不用Date SimpleDateFormat Calendar之间倒腾来倒腾去了!日期创建-获取-操作一步到位! 如果JDK版本更新到了8及以上, ...
- 【Hutool】工具类之日期时间工具-DateUtil
日期时间工具类 一.依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-al ...
- 日期工具类 DateUtils(继承org.apache.commons.lang.time.DateUtils类)
/** * */ package com.dsj.gdbd.utils.web; import org.apache.commons.lang3.time.DateFormatUtils; impor ...
- org.apache.commons.lang下的工具类
1.org.apache.commons.lang.ArrayUtils 例子 package chongqingyusp; import java.util.Map; import org.apac ...
- org.apache.commons.lang.exception包的ExceptionUtils工具类获取getFullStackTrace
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...
- 让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
JAVA的时间日期处理一直是一个比较复杂的问题,大多数程序员都不能很轻松的来处理这些问题.首先Java中关于时间的类,从 JDK 1.1 开始,Date的作用很有限,相应的功能已由Calendar与D ...
- org.apache.commons.lang.StringUtils类
org.apache.commons.lang.StringUtils类 本文摘自:(http://www.blogjava.net/japper/archive/2012/05/23/378946. ...
随机推荐
- hdu3359 Kind of a Blur
因为变化出来的是平均数,那么就可以对每一个变化出来的列方程,直接高斯消元就行了. #include<bits/stdc++.h> #define N 100005 #define LL l ...
- Java8大排序算法
一.冒泡排序 基本思想:通过对待排序序列此前向后,依次比较相邻元素的值,若发现逆序则进行交换,使得较大的值从前面移动到后面, 类似于水下的气泡一样(是所有排序算法中效率最低的) publi ...
- ACM&OI 基础数论算法专题
ACM&OI 基础数学算法专题 一.数论基础 质数及其判法 (已完结) 质数的两种筛法 (已完结) 算数基本定理与质因数分解 (已完结) 约数与整除 (已完结) 整除分块 (已完结) 最大公约 ...
- 51Nod1085 0-1背包(一维和二维数组实现)
背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细) 题目如下: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积 ...
- UML-持久框架-目标&关键思想
1.目标 1).使用模板方法.状态模式.命令模式来设计部分框架 2).介绍对象-关系(O-R)映射中的一些问题 3).使用虚代理实现的滞后具体化 2.关键思想 1).映射(Mapping) 类--表 ...
- Codeforces 1299B/1300D - Aerodynamic
题目大意: 给定一个图形S,让这个图形任意平移,但是要保证原点(0,0)一直在它的内部或者边上 最后把它能移动到的所有位置进行拼合可以得到一个图形T 问图形S与图形T是否相似 点会按照逆时针顺序给出 ...
- VS2013的工程移植到VS2008
VS2013的工程完成后,用VS2008创建一个名称一样的工程(大小写也一样). 具体过程参考http://blog.csdn.net/sz76211822/article/details/42775 ...
- Java8集合框架——HashMap源码分析
java.util.HashMap 本文目录: 一.HashMap 的特点概述和说明 二.HashMap 的内部实现:从内部属性和构造函数说起 三.HashMap 的 put 操作 四.HashMap ...
- 80.常用的返回QuerySet对象的方法使用详解:order_by
order_by: 将模型生成的表按照某个字段进行排序,默认情况下,按照升序的顺序排序,如果想要按照降序的顺序排序可以在字段的前面加一个"-",加一个负号就可以进行反转. mode ...
- Mac电脑如何彻底删除node
之前本来想搭建一个hexo来写博客的,但是最后还是放弃,老老实实就在博客园和CSDN写博文了,这里记录一下怎么在Mac电脑下彻底删除node.js的方法 下面这个方法是我结合了网上好几个方法综合在一起 ...