Java 的日期时辰
Java能够或许编写桌面操纵法式、Web操纵法式。那末大师晓得Java 的日期时辰是甚么呢?上面一路来看看!
Java 日期时辰
java.util 包供给了 Date 类来封装今后的日期和时辰。 Date 类供给两个机关函数来实例化 Date 工具。
第一个机关函数操纵今后日期和时辰来初始化工具。
Date( )
第二个机关函数领受一个参数,该参数是从1970年1月1日起的毫秒数。
Date(long millisec)
Date工具建立今后,能够或许挪用上面的体例。
序号 | 体例和描写 |
---|---|
1 | boolean after(Date date) 若当挪用此体例的Date工具在指定日期今后前往true,不然前往false。 |
2 | boolean before(Date date) 若当挪用此体例的Date工具在指定日期之前前往true,不然前往false。 |
3 | Object clone( ) 前往此工具的正本。 |
4 | int compareTo(Date date) 比拟当挪用此体例的Date工具和指定日期。二者相称时辰前往0。挪用工具在指定日期之前则前往负数。挪用工具在指定日期今后则前往负数。 |
5 | int compareTo(Object obj) 若obj是Date范例则操纵同等于compareTo(Date) 。不然它抛出ClassCastException。 |
6 | boolean equals(Object date) 当挪用此体例的Date工具和指定日期相称时辰前往true,不然前往false。 |
7 | long getTime( ) 前往自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 工具表现的毫秒数。 |
8 | int hashCode( ) 前往此工具的哈希码值。 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT今后time毫秒数设置时辰和日期。 |
10 | String toString( ) 转换Date工具为String表现情势,并前往该字符串。 |
取得今后日期时辰
Java中取得今后日期和时辰很简略,操纵 Date 工具的 toString() 体例来打印今后日期和时辰,以下所示:
实例
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 工具 Date date = new Date(); // 操纵 toString() 函数显现日期时辰 System.out.println(date.toString()); } }
运转实例
以上实例编译运转成果以下:
Mon May 04 09:51:52 CDT 2013
日期比拟
Java操纵以下三种体例来比拟两个日期:
操纵 getTime() 体例取得两个日期(自1970年1月1日履历的毫秒数值),而后比拟这两个值。
操纵体例 before(),after() 和 equals()。比方,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 前往true。
操纵 compareTo() 体例,它是由 Comparable 接口界说的,Date 类完成了这个接口。
操纵 SimpleDateFormat 格局化日期
SimpleDateFormat 是一个以说话情况敏感的体例来格局化和阐发日期的类。SimpleDateFormat 许可你挑选任何用户自界说日期时辰格局来运转。比方:
实例
import java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { Date dNow = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); System.out.println("Current Date: " + ft.format(dNow)); } }
运转实例
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
这一行代码建立了转换的格局,此中 yyyy 是完整的公元年,MM 是月份,dd 这天期,HH:mm:ss 是时、分、秒。
注重:有的格局大写,有的格局小写,比方 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
以上实例编译运转成果以下:
Current Date: Sun 2014.07.18 at 14:14:09 PM PDT
日期和时辰的格局化编码
时辰形式字符串用来指按时辰格局。在此形式中,一切的 ASCII 字母被保留为形式字母,界说以下:
字母 | 描写 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格局小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 礼拜几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格局小时 | 10 |
z | 时区 | Eastern Standard Time |
' | 笔墨定界符 | Delimiter |
" | 单引号 | ` |
操纵printf格局化日期
printf 体例能够或许很轻松地格局化时辰和日期。操纵两个字母格局,它以 %t 开首并且以上面表格中的一个字母开头。
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包含全数日期和时辰信息 | 礼拜六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格局 | 2007-10-27 |
D | "月/日/年"格局 | 10/27/07 |
r | "HH:MM:SS PM"格局(12时制) | 02:25:51 下战书 |
T | "HH:MM:SS"格局(24时制) | 14:28:16 |
R | "HH:MM"格局(24时制) | 14:28 |
更多 printf 剖析能够或许参见:Java 格局化输出 printf 例子
实例
实例
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 工具 Date date = new Date(); //c的操纵 System.out.printf("全数日期和时辰信息:%tc%n",date); //f的操纵 System.out.printf("年-月-日格局:%tF%n",date); //d的操纵 System.out.printf("月/日/年格局:%tD%n",date); //r的操纵 System.out.printf("HH:MM:SS PM格局(12时制):%tr%n",date); //t的操纵 System.out.printf("HH:MM:SS格局(24时制):%tT%n",date); //R的操纵 System.out.printf("HH:MM格局(24时制):%tR",date); } }
运转实例
以上实例编译运转成果以下:
全数日期和时辰信息:礼拜一 玄月 10 10:43:36 CST 2012
年-月-日格局:2012-09-10
月/日/年格局:09/10/12
HH:MM:SS PM格局(12时制):10:43:36 上午
HH:MM:SS格局(24时制):10:43:36
HH:MM格局(24时制):10:43
若是你须要反复供给日期,那末操纵这类体例来格局化它的每局部就有点庞杂了。是以,能够或许操纵一个格局化字符串指出要被格局化的参数的索引。
索引必须紧跟在%后面,并且必须以$竣事。比方:
实例
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 工具 Date date = new Date(); // 操纵toString()显现日期和时辰 System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } }
运转实例
以上实例编译运转成果以下:
Due date: February 09, 2014
或,你能够或许操纵 < 标记。它标明先前被格局化的参数要被再次操纵。比方:
实例
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date 工具 Date date = new Date(); // 显现格局化时辰 System.out.printf("%s %tB %<te, p="" }="" }<="" date);="" date:?,="" ?due="" %
运转实例
以上实例编译运转成果以下:
Due date: February 09, 2014
界说日期格局的转换符能够或许使日期经由进程指定的转换符天生新字符串。这些日期转换符以下所示:
实例
import java.util.*; public class DateDemo { public static void main(String args[]) { Date date=new Date(); //b的操纵,月份简称 String str=String.format(Locale.US,"英文月份简称:%tb",date); System.out.println(str); System.out.printf("本地月份简称:%tb%n",date); //B的操纵,月份全称 str=String.format(Locale.US,"英文月份全称:%tB",date); System.out.println(str); System.out.printf("本地月份全称:%tB%n",date); //a的操纵,礼拜简称 str=String.format(Locale.US,"英文礼拜的简称:%ta",date); System.out.println(str); //A的操纵,礼拜全称 System.out.printf("本地礼拜的简称:%tA%n",date); //C的操纵,年前两位 System.out.printf("年的前两位数字(缺乏两位后面补0):%tC%n",date); //y的操纵,年后两位 System.out.printf("年的后两位数字(缺乏两位后面补0):%ty%n",date); //j的操纵,一年的天数 System.out.printf("一年中的天数(即年的第几天):%tj%n",date); //m的操纵,月份 System.out.printf("两位数字的月份(缺乏两位后面补0):%tm%n",date); //d的操纵,日(二位,不够补零) System.out.printf("两位数字的日(缺乏两位后面补0):%td%n",date); //e的操纵,日(一名不补零) System.out.printf("月份的日(后面不补0):%te",date); } }
输出成果为:
英文月份简称:May
本地月份简称:蒲月
英文月份全称:May
本地月份全称:蒲月
英文礼拜的简称:Thu
本地礼拜的简称:礼拜四
年的前两位数字(缺乏两位后面补0):20
年的后两位数字(缺乏两位后面补0):17
一年中的天数(即年的第几天):124
两位数字的月份(缺乏两位后面补0):05
两位数字的日(缺乏两位后面补0):04
月份的日(后面不补0):4
剖析字符串为时辰
SimpleDateFormat 类有一些附加的体例,出格是parse(),它试图按照给定的SimpleDateFormat 工具的格局化存储来剖析字符串。比方:
实例
import java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); String input = args.length == 0 ? "1818-11-11" : args[0]; System.out.print(input + " Parses as "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Unparseable using " + ft); } } }
运转实例
以上实例编译运转成果以下:
$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
Java 休眠(sleep)
sleep()使今后线程进入障碍状况(梗阻今后线程),让出CPU的操纵、目标是不让今后线程单独攻克该历程所获的CPU资本,以留必然时辰给其余线程履行的机遇。
你能够或许让法式休眠一毫秒的时辰或到您的计较机的寿命长的肆意段时辰。比方,上面的法式会休眠3秒:
实例
import java.util.*; public class SleepDemo { public static void main(String args[]) { try { System.out.println(new Date( ) + " "); Thread.sleep(1000*3); // 休眠3秒 System.out.println(new Date( ) + " "); } catch (Exception e) { System.out.println("Got an exception!"); } } }
运转实例
以上实例编译运转成果以下:
Thu Sep 17 10:20:30 CST 2015
Thu Sep 17 10:20:33 CST 2015
丈量时辰
上面的一个例子标明若何丈量时辰距离(以毫秒为单位):
实例
import java.util.*; public class DiffDemo { public static void main(String args[]) { try { long start = System.currentTimeMillis( ); System.out.println(new Date( ) + " "); Thread.sleep(5*60*10); System.out.println(new Date( ) + " "); long end = System.currentTimeMillis( ); long diff = end - start; System.out.println("Difference is : " + diff); } catch (Exception e) { System.out.println("Got an exception!"); } } }
运转实例
以上实例编译运转成果以下:
Fri Jan 08 09:48:47 CST 2016
Fri Jan 08 09:48:50 CST 2016
Difference is : 3019
Calendar类
咱们此刻已能够或许格局化并建立一个日期工具了,可是咱们若何能力设置和取得日期数据的特定局部呢,比方说小时,日,或分钟? 咱们又若安在日期的这些局部加上或减去值呢? 谜底是操纵Calendar 类。
Calendar类的功效要比Date类壮大良多,并且在完成体例上也比Date类要庞杂一些。
Calendar类是一个笼统类,在现实操纵时完成特定的子类的工具,建立工具的进程对法式员来讲是通明的,只须要操纵getInstance体例建立便可。
建立一个代表体系今后日期的Calendar工具
Calendar c = Calendar.getInstance();//默许是今后日期
建立一个指定日期的Calendar工具
操纵Calendar类代表特定的时辰,须要起首建立一个Calendar的工具,而后再设定该工具中的年代日参数来完成。
//建立一个代表2009年6月12日的Calendar工具
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
Calendar类工具字段范例
Calendar类顶用一下这些常量表现差别的意思,jdk内的良多类实在都是接纳的这类思惟
常量 | 描写 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意思完整不异 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 礼拜几 |
Calendar类工具信息的设置
Set设置
如:
Calendar c1 = Calendar.getInstance();
挪用:
public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar工具c1的年代日别离设这为:2009、6、12
操纵字段范例设置
若是只设定某个字段,比方日期的值,则能够或许操纵以下set体例:
public void set(int field,int value)
把 c1工具代表的日期设置为10号,别的一切的数值会被从头计较
c1.set(Calendar.DATE,10);
把c1工具代表的年份设置为2008年,其余的一切数值会被从头计较
c1.set(Calendar.YEAR,2008);
其余字段属性set的意思以此类推
Add设置
Calendar c1 = Calendar.getInstance();
把c1工具的日期加上10,也便是c1也就表现为10天后的日期,别的一切的数值会被从头计较
c1.add(Calendar.DATE, 10);
把c1工具的日期减去10,也便是c1也就表现为10天前的日期,别的一切的数值会被从头计较
c1.add(Calendar.DATE, -10);
其余字段属性的add的意思以此类推
Calendar类工具信息的取得
Calendar c1 = Calendar.getInstance(); // 取得年份 int year = c1.get(Calendar.YEAR); // 取得月份 int month = c1.get(Calendar.MONTH) + 1; // 取得日期 int date = c1.get(Calendar.DATE); // 取得小时 int hour = c1.get(Calendar.HOUR_OF_DAY); // 取得分钟 int minute = c1.get(Calendar.MINUTE); // 取得秒 int second = c1.get(Calendar.SECOND); // 取得礼拜几(注重(这个与Date类是差别的):1代表礼拜日、2代表礼拜1、3代表礼拜二,以此类推) int day = c1.get(Calendar.DAY_OF_WEEK);
GregorianCalendar类
Calendar类完成了公历日历,GregorianCalendar是Calendar类的一个详细完成。
Calendar 的getInstance()体例前往一个默许用今后的说话情况和时区初始化的GregorianCalendar工具。GregorianCalendar界说了两个字段:AD和BC。这是代表公历界说的两个时期。
上面列出GregorianCalendar工具的几个机关体例:
序号 | 机关函数和申明 |
1 | GregorianCalendar() 在具备默许说话情况的默许时区内操纵今后时辰机关一个默许的 GregorianCalendar。 |
2 | GregorianCalendar(int year, int month, int date) 在具备默许说话情况的默许时区内机关一个带有给定日期设置的 GregorianCalendar |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) 为具备默许说话情况的默许时区机关一个具备给定日期和时辰设置的 GregorianCalendar。 |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 为具备默许说话情况的默许时区机关一个具备给定日期和时辰设置的 GregorianCalendar。 |
5 | GregorianCalendar(Locale aLocale) 在具备给定说话情况的默许时区内机关一个基于今后时辰的 GregorianCalendar。 |
6 | GregorianCalendar(TimeZone zone) 在具备默许说话情况的给按时区内机关一个基于今后时辰的 GregorianCalendar。 |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) 在具备给定说话情况的给按时区内机关一个基于今后时辰的 GregorianCalendar。 |
这里是GregorianCalendar 类供给的一些有效的体例列表:
序号 | 体例和申明 |
1 | void add(int field, int amount) 按照日历法则,将指定的(有标记的)时辰量增加到给定的日历字段中。 |
2 | protected void computeFields() 转换UTC毫秒值为时辰域值 |
3 | protected void computeTime() 笼盖Calendar ,转换时辰域值为UTC毫秒值 |
4 | boolean equals(Object obj) 比拟此 GregorianCalendar 与指定的 Object。 |
5 | int get(int field) 取得指定字段的时辰值 |
6 | int getActualMaximum(int field) 前往今后日期,给定字段的最大值 |
7 | int getActualMinimum(int field) 前往今后日期,给定字段的最小值 |
8 | int getGreatestMinimum(int field) 前往此 GregorianCalendar 实例给定日历字段的最高的最小值。 |
9 | Date getGregorianChange() 取得格里高利历的变动日期。 |
10 | int getLeastMaximum(int field) 前往此 GregorianCalendar 实例给定日历字段的最低的最大值 |
11 | int getMaximum(int field) 前往此 GregorianCalendar 实例的给定日历字段的最大值。 |
12 | Date getTime() 取得日历今后时辰。 |
13 | long getTimeInMillis() 取得用长整型表现的日历的今后时辰 |
14 | TimeZone getTimeZone() 取得时区。 |
15 | int getMinimum(int field) 前往给定字段的最小值。 |
16 | int hashCode() 重写hashCode. |
17 | boolean isLeapYear(int year) 肯定给定的年份是不是为闰年。 |
18 | void roll(int field, boolean up) 在给定的时辰字段上增加或减去(上/下)单个时辰单位,不变动更大的字段。 |
19 | void set(int field, int value) 用给定的值设置时辰字段。 |
20 | void set(int year, int month, int date) 设置年、月、日的值。 |
21 | void set(int year, int month, int date, int hour, int minute) 设置年、月、日、小时、分钟的值。 |
22 | void set(int year, int month, int date, int hour, int minute, int second) 设置年、月、日、小时、分钟、秒的值。 |
23 | void setGregorianChange(Date date) 设置 GregorianCalendar 的变动日期。 |
24 | void setTime(Date date) 用给定的日期设置Calendar的今后时辰。 |
25 | void setTimeInMillis(long millis) 用给定的long型毫秒数设置Calendar的今后时辰。 |
26 | void setTimeZone(TimeZone value) 用给按时区值设置今后时区。 |
27 | String toString() 前往代表日历的字符串。 |
实例
实例
import java.util.*; public class GregorianCalendarDemo { public static void main(String args[]) { String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int year; // 初始化 Gregorian 日历 // 操纵今后时辰和日期 // 默许为本地时辰和时区 GregorianCalendar gcalendar = new GregorianCalendar(); // 显现今后时辰和日期的信息 System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); // 测试今后年份是不是为闰年 if(gcalendar.isLeapYear(year)) { System.out.println("今后年份是闰年"); } else { System.out.println("今后年份不是闰年"); } } }
运转实例
以上实例编译运转成果以下:
Date: Apr 22 2009
Time: 11:25:27
今后年份不是闰年
【Java 的日期时辰】相干文章:
java日期时辰根基操纵体例08-08
Java口试试题日期和时辰10-15
java进修之日期的运算代码06-05
对于PHP的日期与时辰08-19
Java中日期与字符串的处置08-16
php日期转时辰戳 指定日期转换成时辰戳09-26
阐发php日期转时辰戳06-11
Java取得UTC时辰的体例08-09
Word2010若何疾速输出日期时辰10-08
java若何给时辰格局化08-13