首页 > 编程语言 > 详细

Java 之 JDK1.8之前日期时间类

时间:2019-12-17 12:17:51      阅读:143      评论:0      收藏:0      [点我收藏+]

一、JDK1.8之前日期时间类

  技术分享图片

 

 

二、 java.lang.System类

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

三、java.util.Date 类

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

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

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

  (1)构造方法

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

  

  (2)常用方法

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是时间标准

  

  (3)已过时方法

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

  

四、java.util.TimeZone和Locale

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

  获取 Locale 对象:

 Locale(String language)
 Locale(String language, String country)
 Locale.CHINA、Locale.US等

  Demo:

1     public static void main(String[] args) {
2         Locale loc = Locale.CHINA;
3         System.out.println(loc);//zh_CN
4         System.out.println(Locale.US);//en_US
5         System.out.println(Locale.JAPAN);//ja_JP
6         
7         Locale c = new Locale("zh","CN");
8         System.out.println(c);
9     }

 

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

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

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

  

  Demo:

 1 public static void main(String[] args) {
 2         TimeZone t = TimeZone.getDefault();
 3         System.out.println(t);
 4 
 5                 String[] all = TimeZone.getAvailableIDs();
 6         for (String id : all) {
 7             System.out.println(id);
 8         }
 9         
10 
11         TimeZone t1 = TimeZone.getTimeZone("America/New_York");
12         System.out.println(t1);
13         
14         TimeZone t2 = TimeZone.getTimeZone("Asia/Shanghai");
15         System.out.println(t2);
16     }
17     

 

五、java.util.Calendar

  Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

人们对于时间的认识是:某年某月某日,这样的日期概念。计算机是long类型的数字。通过Calendar在二者之间搭起桥梁。而且Calendar提供了很多关于日期时间计算的方法。

  GregorianCalendar(公历)是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

  注意

    月份:一月是0,二月是1,以此类推,12月是11

    星期:周日是1,周二是2,。。。。周六是7

  Demo:

 1 //默认语言环境的时间(时区)
 2         Calendar c = new GregorianCalendar();
 3         /*
 4          * java.util.GregorianCalendar[
 5          * time=1480667849712,
 6          * areFieldsSet=true,
 7          * areAllFieldsSet=true,
 8          * lenient=true,
 9          * zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],
10          * firstDayOfWeek=1,
11          * minimalDaysInFirstWeek=1,
12          * ERA=1,
13          * YEAR=2016,
14          * MONTH=11,
15          * WEEK_OF_YEAR=49,//本年第49周
16          * WEEK_OF_MONTH=1,//本月第1周
17          * DAY_OF_MONTH=2,
18          * DAY_OF_YEAR=337,//本年第337天
19          * DAY_OF_WEEK=6,
20          * DAY_OF_WEEK_IN_MONTH=1,        
21          * AM_PM=1, //下午
22          * HOUR=4,
23          * HOUR_OF_DAY=16,  //HOUR是12小时制, HOUR_OF_DAY是24小时制
24          * MINUTE=37,
25          * SECOND=29,
26          * MILLISECOND=712,
27          * ZONE_OFFSET=28800000,
28          * DST_OFFSET=0]
29          */
30         public static void main(String[] args) {
31             //默认语言环境的时间(时区)
32         Calendar c = new GregorianCalendar();
33         
34         int year=c.get(Calendar.YEAR);
35         int month=c.get(Calendar.MONTH);
36         int date=c.get(Calendar.DAY_OF_MONTH);
37         
38         int hour=c.get(Calendar.HOUR_OF_DAY);
39         int minute=c.get(Calendar.MINUTE);
40         int second=c.get(Calendar.SECOND);
41         int mill=c.get(Calendar.MILLISECOND);
42         int week=c.get(Calendar.DAY_OF_WEEK);
43         
44         StringBuffer dateStr=new StringBuffer();
45         dateStr.append(year).append("年");
46         dateStr.append(month+1).append("月");
47         dateStr.append(date).append("日").append("  ");
48         dateStr.append(hour).append("时");
49         dateStr.append(minute).append("分");
50         dateStr.append(second).append("秒");
51         dateStr.append(mill).append("毫秒").append("  ");
52         
53         String[] weeks={"日","一","二","","四","五","六"};
54         dateStr.append("星期").append(weeks[week-1]);
55         
56         System.out.println(dateStr);
57     }

 

  根据指定的日期获取对象:

 1 public static void main(String[] args) {
 2         Calendar c = new GregorianCalendar(2018, 6, 13);
 3 //        c.set(2018, Calendar.DECEMBER, 4, 12, 12, 0);
 4 //        c.setTime(new Date());
 5         //15天之后
 6         //c.add(Calendar.DATE, 15);
 7         //2个月之前
 8         //c.add(Calendar.DAY_OF_MONTH, -2);
 9         //12小时之后
10         c.add(Calendar.HOUR, 12);
11         
12         Date time = c.getTime();//转成日期
13         System.out.println(time);
14     }

 

  getInstance() 方法

public static Calendar getInstance()使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境。
public static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了给定的时区和给定的语言环境

  Demo:

 1   public static void main(String[] args) {
 2         Calendar c = Calendar.getInstance();
 3         System.out.println(c);
 4         
 5         Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);
 6         System.out.println(c2);
 7         
 8         Calendar c3 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US);
 9         System.out.println(c3);
10     }

 

六、java.text.DateFormat和SimpleDateFormat

  完成字符串和时间对象的转化:

String format(date)
Date parse(string)

  Demo:

 1 public static void main(String[] args) {
 2         Date date = new Date();
 3         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 是本年的第几D");
 4         System.out.println(sf.format(date));
 5         
 6         String s = "2016-12-01 14:12:23";
 7         SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 8         try {
 9             Date d = sf2.parse(s);
10             System.out.println(d);
11         } catch (ParseException e) {
12             e.printStackTrace();
13         }
14     }

 

               技术分享图片

Java 之 JDK1.8之前日期时间类

原文:https://www.cnblogs.com/niujifei/p/12053342.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!