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.hour | 12小时制的小时 |
calendar.hour_of_day | 24小时制的小时 |
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);