目录
1.date类型使用
2.获取想要的自定义时间点
3.date类型与String类型转换
4.date时间先后比较
在java中,日期时间用java.util.Date类来表示,调用默认构造器Date(),将会创建一个当前系统时间的Date对象,时间精确到毫秒:
Date date = new Date();
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();
}
}
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的区别)
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点的比较错误的情况。