日期字符串:Wed, 16 Jan 2013 19:01:18 EST
日期格式:EEE, dd MMM yyyy HH:mm:ss ZZZ
参考:http://blog.163.com/zhaowenchao_vip/blog/static/1715151442011524114322505/
为了防止遗忘,先将页面copy一下
- 时间和日期中常用到的几个类:java.util.Date,
- java.util.Calendar,
- java.util.GregorainCalendar,
- java.text.DateFormat,
- java.text.SimpleDateFormat
- java.util.Date :
- 表示特定瞬间,精确到毫秒
- 一天是 24 * 60 * 60 = 86400 秒
- 世界时(UT 或 UTC) , 格林威治时间 (GMT), 格林威治时(GMT)和世界时(UT)
- 是相等的,格林威治时(GMT) 是标准的"民间"称呼, 世界时(UT) 是相同标准的
- 科学称呼。UTC 和 UT 的区别是:UTC 是基于原子时钟的,UT 是基于天体观察的。
- (中文版的jdk 真是好啊,跟科普教材是的,呵呵)
- 常用的构造方法 :
- Date();
- Date(long date)
- (long date) 表示从标准基准时间(称为 "历元" epoch ,即 1970.1.1
- 00:00:00 GMT)经历的毫秒数。
- 还有一些构造方法已经 deprecated 了
- 主要的方法:(介绍几个常用的,详细的查询 jdk 文档)
- boolean after(Date when) 测试日期在此日期之后。
- boolean before(Date when) 测试日期在此日期之前。
- Object clone() 返回此对象的副本
- long getTime() 返回自 1970.1.1 00:00:00 GMT 后,此对象表示的毫秒数
- void setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日
- 00:00:00 GMT 以后 time 毫秒的时间点。
- String toString() 将 Date 对象转化成以下形式的
- String:dow mon dd hh:mm:ss zzz yyyy
- 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
- dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
- mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep,
- Oct, Nov, Dec)。
- dd 是一月中的某一天(01 至 31),显示为两位十进制数。
- hh 是一天中的小时(00 至 23),显示为两位十进制数。
- mm 是小时中的分钟(00 至 59),显示为两位十进制数。
- ss 是分钟中的秒数(00 至 61),显示为两位十进制数。 60,61 是因为有"润秒"
- zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。
- 如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。
- yyyy 是年份,显示为 4 位十进制数。
- 使用 System.currentTimeMillis() 获得当前系统时间的毫秒数
- java.util.Calendar :
- Calendar 类是一个抽象类.
- Calendar rightNow = Calendar.getInstance();
- 可以使用三种方法更改日历字段:set()、add() 和 roll()。
- set(f, value) 将日历字段 f 更改为 value。
- 此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段
- f 是立即更改的,但是直到下次调用 get()、getTime()、getTimeInMillis()、
- add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调
- 用 set() 不会触发多次不必要的计算。
- add(f, delta) 将 delta 添加到 f 字段中。这等同于调用
- set(f, get(f) + delta)
- roll(f, delta) 将 delta 添加到 f 字段中,但不更改更大的字段。
- java.util.GregorianCalendar:
- GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家
- 使用的标准日历系统。
- java.text.DateFormat:
- DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并
- 分析日期或时间。
- java.text.SimpleDateFormat:
- SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。
- 它允许进行格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。
- SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,
- 仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或
- getDateTimeInstance 来新的创建日期-时间格式化程序。每一个这样的类方法
- 都能够返回一个以默认格式模式初始化的日期/时间格式化程序。可以根据需要使用
- applyPattern 方法来修改格式模式。
- 日期和时间格式由日期和时间模式 字符串指定。
- 在日期和时间模式字符串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z'
- 被解释为模式字母,用来表示日期或时间字符串元素。
- 引用
- 字母 日期或时间元素 表示 示例
- G Era 标志符 Text AD
- y 年 Year 1996; 96
- M 年中的月份 Month July; Jul; 07
- w 年中的周数 Number 27
- W 月份中的周数 Number 2
- D 年中的天数 Number 189
- d 月份中的天数 Number 10
- F 月份中的星期 Number 2
- E 星期中的天数 Text Tuesday; Tue
- a Am/pm 标记 Text PM
- H 一天中的小时数(0-23) Number 0
- k 一天中的小时数(1-24) Number 24
- K am/pm 中的小时数(0-11) Number 0
- h am/pm 中的小时数(1-12) Number 12
- m 小时中的分钟数 Number 30
- s 分钟中的秒数 Number 55
- S 毫秒数 Number 978
- z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
- Z 时区 RFC 822 time zone -0800
- 引用
- 日期和时间模式 结果
- "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
- "EEE, MMM d, ''yy" Wed, Jul 4, '01
- "h:mm a" 12:08 PM
- "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
- "K:mm a, z" 0:08 PM, PDT
- "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
- "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
- "yyMMddHHmmssZ" 010704120856-0700
- "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
- 获得当前系统的毫秒数:
- 代码
- package org.lokvin.example.calendar;
- public class CalendarExample1 {
- public static void main(String[] args) {
- java.util.Date date = new java.util.Date();
- //获得当前系统的毫秒数,自 1970.1.1 00:00:00 GMT
- long time = System.currentTimeMillis();
- java.util.Date date1 = new java.util.Date(time);
- System.out.println("date = " + date.toString());
- System.out.println("millisecond = " + time);
- System.out.println("date1 = " + date1.toString());
- }
- }
- 运行结果:
- 引用
- date = Mon Dec 04 16:01:16 CST 2006
- millisecond = 1165219276771
- date1 = Mon Dec 04 16:01:16 CST 2006
- 代码
- package org.lokvin.example.calendar;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- public class CalendarExample2 {
- public static void main(String[] args) {
- //获得当前日期
- Calendar calendar = Calendar.getInstance();
- int era = calendar.get(Calendar.ERA);// 0 = BC, 1 = AD
- System.out.println("ERA = " + era);
- int year = calendar.get(Calendar.YEAR); //2006
- System.out.println("YEAR = " + year);
- int month = calendar.get(Calendar.MONTH);
- //获得当前月份, 0..11 表示 JAN..DEC
- System.out.println("Month = " + month);//0 = JAN ... 11 = DEC
- int day = calendar.get(Calendar.DAY_OF_MONTH);
- System.out.println("Day of Month = " + day); // 1
- //获得日期在本周的天数, Sun=1, Mon=2 ... Sta=7
- int day_of_week = calendar.get(Calendar.DAY_OF_WEEK);
- System.out.println("Day of Week = " + day_of_week);
- //获得当前时间 12 时制是 Calendar.HOUR
- int hour12 = calendar.get(Calendar.HOUR);
- //获得 AM ,PM , 0 = AM, 1 = PM
- int ampm = calendar.get(Calendar.AM_PM);
- System.out.println("hour 12 = " + hour12);
- System.out.println("am pm = " + ampm); //0 = am , 1 = pm
- //获得当前时间 24 时制 Calendar.HOUR_OF_DAY
- int hour24 = calendar.get(Calendar.HOUR_OF_DAY);
- System.out.println("hour 24 = " + hour24);
- Calendar today = new GregorianCalendar(2006, Calendar.DECEMBER, 4);
- //Calendar.getInstance() 得到当前具体到毫秒的一个时间点
- System.out.println("calendar = " + calendar.getTime().toString());
- //通过 new GregorianCalendar(2006, Calendar.DECEMBER, 4)
- //生成的 calendar 除了指定的年,月,日其余为0(时分秒=0)
- System.out.println("today = " + today.getTime().toString());
- }
- }
- 运行结果:
- 引用
- ERA = 1
- YEAR = 2006
- Month = 11
- Day of Month = 4
- Day of Week = 2
- hour 12 = 4
- am pm = 1
- hour 24 = 16
- calendar = Mon Dec 04 16:22:42 CST 2006
- today = Mon Dec 04 00:00:00 CST 2006
- 两个日期之间的比较:
- 代码
- package org.lokvin.example.calendar;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- /*
- * 比较两个 calendar 对象之间的先后
- */
- public class CalendarExample3 {
- public static void main(String[] args) {
- //日期比较
- Calendar xmas = new GregorianCalendar(2006, Calendar.DECEMBER, 25);
- Calendar newYear = new GregorianCalendar(2007, Calendar.JANUARY, 1);
- //比较两个日期先后
- boolean flag = xmas.before(newYear);
- System.out.println("flag = " + flag);
- flag = xmas.after(newYear);
- System.out.println("flag = " + flag);
- //两个日期相差的毫秒数
- long timeDiffMillis = newYear.getTimeInMillis() - xmas.getTimeInMillis();
- System.out.println("time diff millis = " + timeDiffMillis);
- //两个日期相差的秒数
- long diffSecs = timeDiffMillis / 1000;
- System.out.println("time diff secs = " + diffSecs);
- //两个日期相差的分钟
- long diffMins = timeDiffMillis / (1000 * 60);
- System.out.println("time diff mins = " + diffMins);
- //两个日期相差的小时
- long diffHours = timeDiffMillis / (1000 * 60 * 60);
- System.out.println("time diff hours = " + diffHours);
- //两个日期相差的天
- long diffDays = timeDiffMillis / (1000 * 60 * 60 * 24);
- System.out.println("time diff days = " + diffDays);
- }
- }
- 运行结果:
- 引用
- flag = true
- flag = false
- time diff millis = 604800000
- time diff secs = 604800
- time diff mins = 10080
- time diff hours = 168
- time diff days = 7
- 使用Calendar 计算年龄:
- 代码
- package org.lokvin.example.calendar;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- /*
- * 计算年龄
- */
- public class CalendarExample4 {
- public static void main(String[] args) {
- //创建生日的 Calendar 对象
- Calendar birthDate = new GregorianCalendar(1979, Calendar.JULY, 7);
- Calendar today = Calendar.getInstance();
- int age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);
- //如果还没有过生日,则 age - 1
- birthDate.add(Calendar.YEAR, age);
- if(today.before(birthDate)){
- age--;
- }
- System.out.println("age = " + age);
- }
- }
- 判断是否为闰年:
- 代码
- package org.lokvin.example.calendar;
- import java.util.GregorianCalendar;
- /*
- * 判断是否为闰年 leap year
- */
- public class CalendarExample5 {
- public static void main(String[] args) {
- //判断是否"闰年" leap year
- GregorianCalendar cal = new GregorianCalendar();
- boolean isLeapYear = cal.isLeapYear(1998);
- System.out.println("is leap year 1998 = " + isLeapYear);
- isLeapYear = cal.isLeapYear(2000);
- System.out.println("is leap year 2000 = " + isLeapYear);
- }
- }
- 运行结果 :
- 引用
- is leap year 1998 = false
- is leap year 2000 = true
- 获得其他时区的时间:
- 代码
- package org.lokvin.example.calendar;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.TimeZone;
- /*
- * 获得其他时区当前时间
- */
- public class CalendarExample6 {
- public static void main(String[] args) {
- Calendar cal = new GregorianCalendar();
- int hour12 = cal.get(Calendar.HOUR);
- int hour24 = cal.get(Calendar.HOUR_OF_DAY);
- System.out.println("hour12 in our timezone = " + hour12);
- System.out.println("hour24 in our timezone = " + hour24);
- //获得其他时区的当前时间,根据 zoneId 获得时区
- Calendar calJap = new GregorianCalendar(TimeZone.getTimeZone("Japan"));
- hour12 = calJap.get(Calendar.HOUR);
- System.out.println("hour12 in japs timezone = " + hour12);
- hour24 = calJap.get(Calendar.HOUR_OF_DAY);
- System.out.println("hour24 in japs timezone = " + hour24);
- //获得 zoneId 的列表
- String[] zoneIds = TimeZone.getAvailableIDs();
- for(int i=0; i<zoneIds.length; i++) {
- String zoneId = zoneIds[i];
- System.out.println("zone id = " + zoneId);
- }
- }
- }
- 运行结果:
- 引用
- hour12 in our timezone = 5
- hour24 in our timezone = 17
- hour12 in japs timezone = 6
- hour24 in japs timezone = 18
- zone id = Etc/GMT+12
- zone id = Etc/GMT+11
- zone id = MIT
- zone id = Pacific/Apia
- zone id = Pacific/Midway
- ...
- 格式化日期:
- 代码
- package org.lokvin.example.calendar;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- public class DateForamExample {
- public static void main(String[] args) {
- Date rightNow = new Date();
- DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
- DateFormat format3 = new SimpleDateFormat("h:mm a");
- DateFormat format4 = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
- DateFormat format5 = new SimpleDateFormat("EEE, MMM, dd, ''yyyy");
- DateFormat format6 = new SimpleDateFormat("yyyy.MM.dd kk:mm 'o''clock' a, zzzz");
- DateFormat format7 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
- System.out.println("format1 = " + format1.format(rightNow));
- System.out.println("format2 = " + format2.format(rightNow));
- System.out.println("format3 = " + format3.format(rightNow));
- System.out.println("format4 = " + format4.format(rightNow));
- System.out.println("format5 = " + format5.format(rightNow));
- System.out.println("format6 = " + format6.format(rightNow));
- System.out.println("format7 = " + format7.format(rightNow));
- }
- }
- 输出结果:
- 引用
- format1 = 2006-12-05 06:12:02
- format2 = 2006-12-05
- format3 = 6:12 下午
- format4 = 2006.12.05 公元 at 18:12:02 CST
- format5 = 星期二, 十二月, 05, '2006
- format6 = 2006.12.05 18:12 o'clock 下午, 中国标准时间
- format7 = 02006.十二月.05 公元 06:12 下午
- 取当月的第一天:
- java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-01");
- java.util.Date firstDay=new java.util.Date();
- System.out.println("the month first day is "+formats.format(firstDay));
- 取当月的最后一天:
- Calendar cal = Calendar.getInstance();
- int maxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH);
- java.text.Format formatter3=new java.text.SimpleDateFormat("yyyy-MM-"+maxDay);
- System.out.println(formatter3.format(cal.getTime()));