java常用时间类型的操作

278 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

对于时间类型的操作是非常常见的,同时API也非常多,容易弄混,本文将总结常用的时间方法,且不断更新。

1.获取时间

关于date 有以下获取时间的方式:

        java.util.Date date= new java.util.Date();
        System.out.println(date);

        java.util.Calendar date4 = java.util.Calendar.getInstance();
        System.out.println(date4);//date4是对象,可以用date.得到时间方法

        //sql语句用
        java.sql.Date date1 = new java.sql.Date(new java.util.Date().getTime());
        System.out.println(date1);


        java.sql.Timestamp date2 = new java.sql.Timestamp(new java.util.Date().getTime());
        System.out.println(date2);


        java.sql.Time date3 = new java.sql.Time(new java.util.Date().getTime());
        System.out.println(date3);
		

总结:使用Calendar 获取年,时,分,秒等更简单。但是获取日期是重0开始的。

2.Date的格式化

格式化使用SimpleDateFormat 。

        // DateString
        java.text.SimpleDateFormat f = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println("Date转String:"+f.format(date4.getTime()));
        // StringDate
        Date date5 = null;
        try {
                date5 = f.parse("2018-01-22 08:31:28");
        } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
        System.out.print("String转Date:"+date5);

注意:SimpleDateFormat 不是线程安全的。 解决方法:

  1. 创建新实例。
  2. 使用synchronized关键字。
 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      
    public static String formatDate(Date date)throws ParseException{
        synchronized(sdf){
            return sdf.format(date);
        }  
    }
  1. 使用ThreadLocal。

3.计算差值

计算差值有两种方式

  1. 获获取毫秒数,然后换成天数。
Long date6 = date.getTime() - date5.getTime();
System.out.println(date6 /(1000 * 24 * 60 * 60));
  1. 用Calendar 类获取年月日进行计算,先获得时分秒。然后两个日期按照逻辑计算,获得的时分秒为int类型。
        java.util.Calendar date7 = java.util.Calendar.getInstance();
		java.util.Calendar date8 = java.util.Calendar.getInstance();
		System.out.println(date7.get(Calendar.YEAR));
		System.out.println(date7.get(Calendar.MONTH));
		System.out.println(date7.get(Calendar.DAY_OF_MONTH));
		System.out.println(date7.get(Calendar.HOUR));
        //可以把其他时间类型转为Calendar 类型
		date8.setTime(date5);
		System.out.println(date8.get(Calendar.MONTH));
  1. 计算某日期X年X月X日后的日期。
date7.add(Calendar.DAY_OF_MONTH, 20);
System.out.println(date7.getTime());