JavaSE进阶

10.5 JDK1.8之前日期时间类

10.5.1 java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒GMT之间以毫秒为单位的时间差。此方法适于计算时间差。

10.5.2 java.util.Date

它的对象表示一个特定的瞬间,精确到毫秒。

Java中时间的表示说白了也是数字,是从标准纪元1970年1月1日0时0分0秒GMT到某个时刻的毫秒数,类型是long

理解:一维的时间轴,选择1970年1月1日0时0分0秒时间为0刻度,1毫秒一刻度

构造方法:

  • Date():      源代码:this(System.currentTimeMillis());
  • Date(long date)

常用方法:

  • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
  • toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:

   dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat), zzz是时间标准。

已过时的方法:

  • public Date(int year,int month,int date,int hrs,int min,int sec)

参数:

year - 减 1900 的年份。

month - 0-11 之间的月份。

date - 一月中 1-31 之间的某一天。

hrs - 0-23 之间的小时数。

min - 0-59 之间的分钟数。

sec - 0-59 之间的秒数。

  • getYear() 从 JDK 1.1 开始,由 get(Calendar.YEAR) - 1900 取代。
  • getMonth()从 JDK 1.1 开始,由 get(Calendar.MONTH) 取代。返回的值在 0 和 11 之间,值 0 表示 1 月。
  • getDate() JDK 1.1 开始,由 get(Calendar.DAY_OF_MONTH) 取代。返回的值在 1 和 31 之间
  • getDay()从 JDK 1.1 开始,由 get(Calendar.DAY_OF_WEEK) 取代。 返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) 表示一周中的某一天
  • getHours()从 JDK 1.1 开始,由 get(Calendar.HOUR_OF_DAY) 取代。返回值是一个数字(0 至 23)
  • getMinutes()从 JDK 1.1 开始,由 get(Calendar.MINUTE) 取代。 返回值在 0 和 59 之间。
  • getSeconds()从 JDK 1.1 开始,由 get(Calendar.SECOND) 取代。回的值在 0 和 61 之间。值 60 和 61 只可能发生在考虑了闰秒的 Java 虚拟机上。

10.5.3 java.util.TimeZone和Locale

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值,日期就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

获取Locale对象:

 Locale(String language)

 Locale(String language, String country)

 Locale.CHINA、Locale.US等

public static void main(String[] args) {

Locale loc = Locale.CHINA;

System.out.println(loc);//zh_CN

System.out.println(Locale.US);//en_US

System.out.println(Locale.JAPAN);//ja_JP

Locale c = new Locale("zh","CN");

System.out.println(c);

}

通常,使用 TimeZone的getDefault 获取 TimeZone,getDefault 基于程序运行所在的时区创建 TimeZone。例如,对于在日本运行的程序,getDefault 基于日本标准时间创建 TimeZone 对象。

也可以用TimeZone的 getTimeZone 及时区 ID 获取 TimeZone 。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间 TimeZone 对象:

 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");

public static void main(String[] args) {

TimeZone t = TimeZone.getDefault();

System.out.println(t);

TimeZone t1 = TimeZone.getTimeZone("America/New_York");

System.out.println(t1);

TimeZone t2 = TimeZone.getTimeZone("Asia/Shanghai");

System.out.println(t2);

}

String[] all = TimeZone.getAvailableIDs();

for (String id : all) {

System.out.println(id);

}