目录

1.date类型使用

2.获取想要的自定义时间点

3.date类型与String类型转换

4.date时间先后比较

5.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()中指定单位进行加减。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐