java——date时间类型操作
简单总结java.util.Date类的使用,包括初始化,获取时间,与String类型转换以及时间先后比较;并简单总结java9新的时间框架localDateTime
目录
1.date类型使用
在java中,日期时间用java.util.Date类来表示,调用默认构造器Date(),将会创建一个当前系统时间的Date对象,时间精确到毫秒:
Date date = new Date();
2.获取想要的自定义时间点
Date类型初始化时可以传入参数获取对应的年月日(注:该方式已被弃用,所以不建议使用)
我们想要输出一个时间常用Calendar时间操作类,set对应的年月日时分秒:
public static Date getStartOfDay(Date time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
上述代码可以获得当天的12点0分0秒。
我们还可以使用Calendar进行时间加减操作:
public class test {
public static void main(String[] args) throws ParseException {
System.out.println(getStartOfDay(new Date()));
}
public static Date getStartOfDay(Date time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
//加10分钟
calendar.add(Calendar.MINUTE, 10);
//减30秒
calendar.add(Calendar.SECOND, -30);
return calendar.getTime();
}
}
还可以通过 Calendar 获得对应时间的小时、分钟等属性:
public int getHour(){
//获取当前时间
Calendar instance = Calendar.getInstance();
//获取当前小时
return instance.get(Calendar.HOUR_OF_DAY);
}
3.date类型与String类型转换
date类型可以使用SimpleDateFormat类型实现与String类型以定义好的日期格式互转:
(1)String转date:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date1 = sdf.parse("2023-03-30 12:00:00");
Date date2 = sdf.parse("2023-03-30 12:00:01");
(2)date转String:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date = sdf.format(new Date());
此处有一个细节,时间格式中 yyyy-MM-dd HH:mm:ss 代表24小时制;yyyy-MM-dd hh:mm:ss 代表12小时制。(小时H和h的区别)
4.date时间先后比较
date类型比较时间先后一般可以用两种方式进行,对应两种格式:
(2)date格式下使用before和after函数:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date1 = sdf.parse("2023-03-30 12:00:00");
Date date2 = sdf.parse("2023-03-30 12:00:01");
System.out.println(date1.before(date2));
System.out.println(date1.after(date2));
(2)String格式下使用CompareTo函数:
public class test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//系统当时时间
String date1 = sdf.format(new Date());
//系统当天12点
String date2 = sdf.format(getStartOfDay(new Date()));
System.out.println("时间点1:"+date1);
System.out.println("时间点2:"+date2);
//比较时间先后
System.out.println(date1.compareTo(date2));
}
//获取当天12点
public static Date getStartOfDay(Date time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
}
date1 时间点1晚于date2时间点2,所以输出的是大于0;小于0则是date1 时间点1早于date2时间点2;等于0则是两个时间点相同。
此处注意比较的两个时间需都是24小时制,否则会出现24小时制的12点晚于12小时制下午4点的比较错误的情况。
5.LocalDateTime的使用
LocalDateTime 是java 8全新的日期框架,使用起来更加便捷。
public void setTime01(){
//获取当前时间
LocalDateTime now = LocalDateTime.now();
//格式化输出
System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//指定时区:美国洛杉矶时间
LocalDateTime dateTime = LocalDateTime.now(ZoneId.of("America/Los_Angeles"));
//格式化输出
System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//指定时间
LocalDateTime before = LocalDateTime.of(2020,6,18,0,0);
//格式化输出
System.out.println(before.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
同时,LocalDateTime 也支持时间的加减:
public void setTime02(){
LocalDateTime now = LocalDateTime.now();
//增加1天
LocalDateTime plus = now.plusDays(1);
//减少1分钟
LocalDateTime decrease = now.plus(-1, ChronoUnit.MINUTES);
//输出
System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(plus.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(decrease.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
上述代码中可以直接调用对应的plusYears()、plusDays()等封装好的方法,也可以在plus()中指定单位进行加减。
更多推荐
所有评论(0)