时间处理是在项目中经常用到的,时间处理一共三个, new Date().getYear(); 该方式已经弃用,第二种: calendar,用的最多,但实际用起来并不方便,现在推荐的是第三种: 使用joda包里面的时间处理工具。
使用方式如下:
1 引入maven包
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
2 使用实例如下,重点观察main方法中的调用,直接出结果,与calendar相比,方便很多
import org.joda.time.DateTime;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
/**
* 获取昨天日期字符串
* @param format 格式(例如:yyyy-MM-dd HH:mm:ss)
* @return
*/
public static String getYesterdayStr(String format) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
return new SimpleDateFormat(format).format(cal.getTime());
}
/**
* long 转换成 日期 再转换成String类型
* @param dateFormat 日期格式 如 YYYY-MM-dd
* @param millSec 毫秒数
* @return
*/
public static String transferLongToDate(String dateFormat, Long millSec) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date date = new Date(millSec);
return sdf.format(date);
}
public static void main(String[] args) {
System.out.println(transferLongToDate("YYYY-MM-dd HH:mm:ss", 1573401600000L));
// joda方式
System.out.println(new DateTime(1573401600000L).toString("YYYY-MM-dd HH:mm:ss"));
System.out.println(getYesterdayStr("YYYY-MM-dd HH:mm:ss"));
// joda方式
System.out.println(new DateTime().minusDays(1).toString("YYYY-MM-dd HH:mm:ss"));
}
}
下面介绍5个最常用的date-time类:
Instant - 不可变的类,用来表示时间轴上一个瞬时的点
DateTime - 不可变的类,用来替换JDK的Calendar类
LocalDate - 不可变的类,表示一个本地的日期,而不包含时间部分(没有时区信息)
LocalTime - 不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息)
LocalDateTime - 不可变的类,表示一个本地的日期-时间(没有时区信息)
不可变的类,表明了正如Java的String类型一样,其对象是不可变的。即,不论对它进行怎样的改变操作,返回的对象都是新对象。
Instant
Instant比较适合用来表示一个事件发生的时间戳。不用去关心它使用的日历系统或者是所在的时区。
该类中使用1970-01-01 00:00:00开始到未来某一刻的的毫秒总数。
初始化
Instant instant = Instant.now();
Instant API
now():获得设置为当前系统毫秒时间的Instant对象。
getMillis():获取瞬间的毫秒数。
minus(long duration):当前时间戳减去duration毫秒数
plus(long duration):当前时间戳加上duration毫秒数
ofEpochMilli(long epochMills):重新设置Instant的毫秒数
parse(String str):输入时间日期字符串,获取对应毫秒数
toDateTime():获取DateTime对象
toInstant():获取Instant对象
代码实例
DateTime
DateTime:用来处理日期时间的类
初始化
DateTime dateTime =new DateTime(); //当前时间
DateTime dateTime =new DateTime(2019,3,11,12,23,11); //设置年月日 时分秒
常用API
获取DateTime 中当前日期的位置
通用格式 AA of BB
例如 hourofDay() 获取当前时间在当前日的第几个小时
这类方法返回的是 Property对象 调用该对象的get()获取对应的值(还有两个方法getMaximumValue()和getMinimumValue()获取对应最大值和最小值)
结果 11
减去/加上DateTime中当前时间
通用格式 minus AA 或者 plus AA
例如 minusDays(int days) //当前时间减去days天数 或者 plusDays(int days) //当前时间加上days天数
这类方法返回的是DateTime 对象 ,调用toString(日期格式)输出对应格式的日期时间
结果 2019-03-06 12:23:11
设置DateTime中时间
通用格式 with AA() 用来设置DateTime实例的某个时间。因为DateTime是不可变对象,所以没有提供setter方法可供使用,with方法也没有改变原有的对象,而是返回了设置后的一个副本DateTime对象
例如
withYear(int year) 设置当前时间的年份
结果 2015-10-11 12:23:11
LocalDate LocalTime LocalDateTime 和 DateTime方法类似
还有很多方法没有提到 开发过程根据开发工具的提示的方法名称就能很清楚的知道对应方法的使用方式,
链接:https://www.jianshu.com/p/f8a50f926900