技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Java --> [Java基础教程]第九章-Java日期处理

[Java基础教程]第九章-Java日期处理

浏览:1393次  出处信息

中国古代是否有自己的历法是朝代是否确立的标志之一,可见日期时间对人们生活的重要性,在计算机中日期和时间仍然占有非常重要的地位。Java中日期是以1970-01-01 08::00:00为基准,其他时间为这个基准的相加(或者相减)的毫秒数。获取当前时间的毫秒数,可以使用“System.currentTimeMillis()"。为了方便使用JDK提供了一个日期时间类java.lang.Date,直接new Date(),也可以获取当前时间。

System.out.println(System.currentTimeMillis());
System.out.println(newDate().getTime());  

上面的代码执行时可能存在下面的输出比上面的输出大,是因为执行时时间已经变更,Date的getTime()方法会返回该时间的long型表示的值,如果不调用这个方法,会输出为"Mon Feb 01 22:34:06 CST 2016"(这个是当前时间的值)的格式。任何类都会继承Object方法,其中会实现toString(),方法,对象直接打印时会调用toString()方法,这点后面我们会有一章主讲这块,这里先了解一下,Date的toString就是把时间输出为这种格式。这种方式可能美国人更熟悉,对于中国人不太直观,那么怎么输出我们熟悉的格式呢?

jdk为格式化Date提供了一个工具类java.text.DateFormat,这是一个抽象类,最常用的子类为java.text.SimpleDateFormat,我们把当前时间输出为"2016-02-01 23:27:72"的格式,代码如下:

DateFormat dateFormat = newSimpleDateFormat("yyyy-MM-dd HH:mm:SS");
Date curDate = newDate();
System.out.println(dateFormat.format(curDate));  

jdk的把年月日以及各种时间输出的方式使用字母表示具体的格式,比如年使用"yyyy",月使用"MM",具体的对应关系如下表:
字母 日期或时间元素 表示 示例

字母日期或时间元素表示示例
GEra 标志符TextAD
yYear1996; 96
M年中的月份MonthJuly; Jul; 07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday; Tue
aAm/pm 标记TextPM
H一天中的小时数(0-23)Number0
k一天中的小时数(1-24)Number24
Kam/pm 中的小时数(0-11)Number0
ham/pm 中的小时数(1-12)Number12
m小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
z时区General time zonePacific Standard Time; PST; GMT-08:00
Z时区RFC 822 time zone-0800

Date类也存在接收入参的构造方法,比如"Date curDate2 = new Date(System.currentTimeMillis());"同样可以获取当前时间,前面我们提到时间是以1970-01-01 08::00:00为基准的long型存储的,我们在初始化Date时,传入0值,看下会输出的是不是"1970-01-01 08::00:00",代码如下:

Date date1970 = newDate(0);
System.out.println(dateFormat.format(date1970));  

工作中,日期的变化改变也是一个比较常用的功能。比如今天是2016-02-01是一个纪念日,那么2017-02-01我需要收到一个提醒,所以我们需要把时间调整为2017年的此刻,然后再进行一些其他的操作。我们可以采用字符串转换为日期的方式,比如:

Date date2017 = dateFormat.parse("2017-02-01 23:27:72");
System.out.println(date2017);  

这种方式要求我们必须确定的日期才能处理,使用起来不太方便,为了更方便处理时间变更,jdk提供了更优雅的方式Calendar日历。

Calendar calendar = Calendar.getInstance();
calendar.setTime(curDate2);
intcurYear = calendar.get(Calendar.YEAR);
calendar.set(Calendar.YEAR, curYear + 1);
System.out.println(dateFormat.format(calendar.getTime())); 

setTime为Calendar对象设置一个时间,get(int)获取int表示的值, set(int, int)设置第一个入参表示的类型的值为第二个入参,比如"calendar.set(Calendar.YEAR, curYear + 1)"设置calendar的年为当前时间的年+1, getTime获取时间。get和set可以处理的类型在Calendar有常量定义,大家可以在Calendar的源码中查看。

小练习:
打印出从1000年到2000年中哪些是闰年。

packagecom.sunhaojie.learntest.ninth;
 
importjava.text.DateFormat;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
 
/**
 * 
 * @ClassName DateTest
 * @Description 日期测试类
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年2月1日 下午11:24:31
 */
publicclassDateTest {
 
    /**
     * 
     * @Title main
     * @Description 日期测试
     * @param args
     * @return void
     *
     * @author sunhaojie 3113751575@qq.com
     * @throws ParseException
     * @date 2016年2月1日 下午10:19:27
     */
    publicstaticvoidmain(String[] args) throwsParseException {
        System.out.println(System.currentTimeMillis());
        System.out.println(newDate().getTime());
        System.out.println(newDate());
 
        DateFormat dateFormat = newSimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        Date curDate = newDate();
        System.out.println(dateFormat.format(curDate));
 
        Date curDate2 = newDate(System.currentTimeMillis());
        System.out.println(dateFormat.format(curDate2));
 
        Date date1970 = newDate(0);
        System.out.println(dateFormat.format(date1970));
 
        Date date2017 = dateFormat.parse("2017-02-01 23:27:72");
        System.out.println(date2017);
 
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(curDate2);
        intcurYear = calendar.get(Calendar.YEAR);
        calendar.set(Calendar.YEAR, curYear + 1);
        System.out.println(dateFormat.format(calendar.getTime()));
    }
 
}

建议继续学习:

  1. 使用PHP处理大于2038年以后的日期    (阅读:2021)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1