美文网首页
Java 日期相关问题

Java 日期相关问题

作者: quiterr | 来源:发表于2017-01-12 17:12 被阅读0次

    本文最早收集整理自骆昊的技术专栏,感谢他的分享,放在这里只为了写代码的时候方便参考。
    后面本人也在不断收集添加其他有用的日期处理代码。

    日期和时间相关问题:

    • 如何取得年月日、小时分钟秒?
    • 如何取得从1970年1月1日0时0分0秒到现在的毫秒数?
    • 如何取得某月的最后一天?
    • 如何格式化日期?
    • 获取一个Date的开始和结束,比如输入"2017-01-19 09:33:00",要求输出"2017-01-19 00:00:00"和"2017-01-19 23:59:59",SQL查某天数据的时候可能用到。

    如何取得年月日、小时分钟秒?

    public class DateTimeTest {
        public static void main(String[] args) {
            Calendar cal = Calendar.getInstance();
            System.out.println(cal.get(Calendar.YEAR));
            System.out.println(cal.get(Calendar.MONTH));    // 0 - 11
            System.out.println(cal.get(Calendar.DATE));
            System.out.println(cal.get(Calendar.HOUR_OF_DAY));
            System.out.println(cal.get(Calendar.MINUTE));
            System.out.println(cal.get(Calendar.SECOND));
    
            // Java 8
            LocalDateTime dt = LocalDateTime.now();
            System.out.println(dt.getYear());
            System.out.println(dt.getMonthValue());     // 1 - 12
            System.out.println(dt.getDayOfMonth());
            System.out.println(dt.getHour());
            System.out.println(dt.getMinute());
            System.out.println(dt.getSecond());
        }
    }
    

    如何取得从1970年1月1日0时0分0秒到现在的毫秒数?

    Calendar.getInstance().getTimeInMillis();
    System.currentTimeMillis();
    Clock.systemDefaultZone().millis(); // Java 8
    

    如何取得某月的最后一天?

    Calendar time = Calendar.getInstance();
    time.getActualMaximum(Calendar.DAY_OF_MONTH);
    

    如何格式化日期?

    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.util.Date;
    
    class DateFormatTest {
    
        public static void main(String[] args) {
            SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
            Date date1 = new Date();
            System.out.println(oldFormatter.format(date1));
    
            // Java 8
            DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
            LocalDate date2 = LocalDate.now();
            System.out.println(date2.format(newFormatter));
        }
    }
    

    补充:Java的时间日期API一直以来都是被诟病的东西,为了解决这一问题,Java 8中引入了新的时间日期API,其中包括LocalDate、LocalTime、LocalDateTime、Clock、Instant等类,这些的类的设计都使用了不变模式,因此是线程安全的设计。如果不理解这些内容,可以参考我的另一篇文章《关于Java并发编程的总结和思考》。

    打印昨天的当前时刻

    import java.util.Calendar;
    
    class YesterdayCurrent {
        public static void main(String[] args){
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DATE, -1);
            System.out.println(cal.getTime());
        }
    }
    

    在Java 8中,可以用下面的代码实现相同的功能。

    import java.time.LocalDateTime;
    
    class YesterdayCurrent {
    
        public static void main(String[] args) {
            LocalDateTime today = LocalDateTime.now();
            LocalDateTime yesterday = today.minusDays(1);
    
            System.out.println(yesterday);
        }
    }
    

    获取一个Date的开始和结束

    比如输入"2017-01-19 09:33:00",要求输出"2017-01-19 00:00:00"和"2017-01-19 23:59:59",SQL查某天数据的时候可能用到。

            //获取某个日期的开始时间
            public static Date getDayStartTime(Date d) {
             Calendar calendar = Calendar.getInstance();
             if(null != d) calendar.setTime(d);
             calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
             calendar.set(Calendar.MILLISECOND, 0);
             return calendar.getTime();
         }
    
             //获取某个日期的结束时间
             public static Date getDayEndTime(Date d) {
             Calendar calendar = Calendar.getInstance();
             if(null != d) calendar.setTime(d);
             calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
             calendar.set(Calendar.MILLISECOND, 999);
             return calendar.getTime();
         }
    

    相关文章

      网友评论

          本文标题:Java 日期相关问题

          本文链接:https://www.haomeiwen.com/subject/xxxjbttx.html