9

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

 3 years ago
source link: https://blogread.cn/it/article/7796?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

浏览:1105次  出处信息

中国古代是否有自己的历法是朝代是否确立的标志之一,可见日期时间对人们生活的重要性,在计算机中日期和时间仍然占有非常重要的地位。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 标志符TextADyYear1996; 96M年中的月份MonthJuly; Jul; 07w年中的周数Number27W月份中的周数Number2D年中的天数Number189d月份中的天数Number10F月份中的星期Number2E星期中的天数TextTuesday; TueaAm/pm 标记TextPMH一天中的小时数(0-23)Number0k一天中的小时数(1-24)Number24Kam/pm 中的小时数(0-11)Number0ham/pm 中的小时数(1-12)Number12m小时中的分钟数Number30s分钟中的秒数Number55S毫秒数Number978z时区General time zonePacific Standard Time; PST; GMT-08:00Z时区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 [email protected]
 * @date 2016年2月1日 下午11:24:31
 */
publicclassDateTest {
 
    /**
     * 
     * @Title main
     * @Description 日期测试
     * @param args
     * @return void
     *
     * @author sunhaojie [email protected]
     * @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年以后的日期    (阅读:1821)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK