Java 日期时间

java 日期时间

java.util 包提供了 date 类来封装当前的日期和时间。

java.util 包提供了 calendar 类用来设置和获取日期数据的特定部分。

另外,还提供了 simpledateformat 类来格式化日期的格式。

 

1. date 类

1)date 类的创建

date 类提供两个构造函数来范例化 date 对象。

第一个构造函数使用当前日期和时间来初始化对象。

date()

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

date(long millisec)

2)date 类的操作

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: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (sun, mon, tue, wed, thu, fri, sat)。

3)获取当前日期时间

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

4)日期比较

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 类实现了这个接口。

 

2. simpledateformat 类

simpledateformat 是一个以语言环境敏感的方式来格式化和分析日期的类。simpledateformat 允许你选择任何用户自定义日期时间格式来运行。

1)simpledateformat 类使用案例

import  java.util.*;
import java.text.*;
 
public class datedemo {
   public static void main(string args[]) {
 
      date dnow = new date( );
      simpledateformat ft = new simpledateformat ("yyyy-mm-dd hh:mm:ss");
 
      system.out.println("当前时间为: " + ft.format(dnow));
   }
}

代码说明:

simpledateformat ft = new simpledateformat ("yyyy-mm-dd hh:mm:ss");

这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,mm 是月份,dd 是日期,hh:mm:ss 是时、分、秒。

注意:有的格式大写,有的格式小写,例如 mm 是月份,mm 是分;hh 是 24 小时制,而 hh 是 12 小时制。

以上范例编译运行结果如下:

当前时间为: 2018-09-06 10:16:34

2)日期和时间的格式化编码

时间模式字符串用来指定时间格式。在此模式中,所有的 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
" 单引号 `

3)解析字符串为时间

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

 

3. calendar类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用calendar 类。

calendar类的功能要比date类强大很多,而且在实现方式上也比date类要复杂一些。

calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getinstance方法创建即可。

1)创建一个代表系统当前日期的calendar对象

calendar c = calendar.getinstance();//默认是当前日期

2)创建一个指定日期的calendar对象

使用calendar类代表特定的时间,需要首先创建一个calendar的对象,然后再设定该对象中的年月日参数来完成。

//创建一个代表2009年6月12日的calendar对象
calendar c1 = calendar.getinstance();
c1.set(2009, 6 - 1, 12);

3)calendar类对象字段类型

calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

常量描述
calendar.year年份
calendar.month月份
calendar.date日期
calendar.day_of_month日期,和上面的字段意义完全相同
calendar.hour12小时制的小时
calendar.hour_of_day24小时制的小时
calendar.minute分钟
calendar.second
calendar.day_of_week星期几

4)calendar类对象信息的设置

set设置

如:

calendar c1 = calendar.getinstance();

调用:

public final void set(int year,int month,int date)
c1.set(2009, 6, 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的意义以此类推

5)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);

下一节:java 数据结构

java语言 教程

相关文章