java.util.Date 日期类
类 Date
表示特定的瞬间,精确到毫秒。
为了实现国际化,使用 Calendar
类实现日期和时间字段之间转换,使用 DateFormat
类来格式化和解析日期字符串。Date 中的相应方法已废弃。
剩下的只有这些方法:
构造方法摘要 | |
---|---|
Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 | |
Date(long date) |
方法摘要 | |
---|---|
boolean | after(Date when) 测试此日期是否在指定日期之后。 |
boolean | before(Date when) 测试此日期是否在指定日期之前。 |
Object | clone() 返回此对象的副本。 |
int | compareTo(Date anotherDate) 比较两个日期的顺序。 |
boolean | equals(Object obj) 比较两个日期的相等性。 |
long | getTime() |
int | hashCode() 返回此对象的哈希码值。 |
void | setTime(long time) |
String | toString() 把此 Date 对象转换为以下形式的 String : dow mon dd hh:mm:ss zzz yyyy 其中:dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
import java.util.*;
import java.text.*;
class DateDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Date d = new Date();
sop(d);
//另一个构造函数演示:
long l = System.currentTimeMillis();
Date dl = new Date(l);
sop(dl);
}
}
打印结果都是相同的:
这种格式我们是不是有点看不懂啊?我们想要转换成 "yyyy年MM月dd日 星期E HH:mm:ss" 的格式。
这个时候发现大部分方法都已过时,下面就看一下另请参见的内容:
另请参见:DateFormat
,
Calendar
,
TimeZone
,
序列化表格
TimeZone是时区,Calendar是日历,DateFormat是时间格式,下面我们就看一下DateFormat:
java.text.DateFormat
public abstract class DateFormat
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
我们发现它有一个方法,能把Date类对象格式化为字符串:
String | format(Date date) 将一个 Date 格式化为日期/时间字符串。 |
可是它是抽象类,不能new对象,我们就使用它的已知子类来new一个对象:
java.text.SimpleDateFormat
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
构造方法 | |
---|---|
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat 。 |
参数:pattern - 描述日期和时间格式的模式。
日期和时间模式
定义了以下模式字母(所有其他字符 'A'
到 'Z'
和 'a'
到 'z'
都被保留):
字母 日期或时间元素 表示 示例 G
Era 标志符 Text AD
y
年 Year 1996
;96
M
年中的月份 Month July
;Jul
;07
w
年中的周数 Number 27
W
月份中的周数 Number 2
D
年中的天数 Number 189
d
月份中的天数 Number 10
F
月份中的星期 Number 2
E
星期中的天数 Text Tuesday
;Tue
a
Am/pm 标记 Text PM
H
一天中的小时数(0-23) Number 0
k
一天中的小时数(1-24) Number 24
K
am/pm 中的小时数(0-11) Number 0
h
am/pm 中的小时数(1-12) Number 12
m
小时中的分钟数 Number 30
s
分钟中的秒数 Number 55
S
毫秒数 Number 978
z
时区 General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
时区 RFC 822 time zone -0800
模式字母通常是重复的,其数量确定其精确表示。
演示:
DateFormat和其子类属于java.text包,因为日期最终是文本格式的,别忘了导text包:
import java.util.*;
import java.text.*;
class DateDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Date d = new Date();
sop(d);//打印的时间看不懂,希望有些格式。
//将模式封装到SimpleDateformat对象中。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
//调用format方法让模式格式化指定Date对象。
String time = sdf.format(d);
sop(time);
}
}
还有人说,我不想把时间格式化,我只想获取其中的年或者日期怎么办?
使用老方法:
import java.util.*;
import java.text.*;
class CalendarDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Date d = new Date();
sop(d);
//只想获取年,用格式化方法只格式化年:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year = sdf.format(d);//返回的是字符串,不方便做运算
sop(year+"年");//可以使用Integer.parseInt(String)转换,不过比较麻烦。
}
}
返回的是字符串,不方便做运算。可以使用Integer.parseInt(String)转换,不过比较麻烦。
Date里面有getYear方法,已过时,不过已经告诉你在新的类中:
int |
|
int |
|
int | getHours() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。 |
int | getMinutes() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。 |
int | getMonth() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。 |
int | getSeconds() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。 |
int | getYear() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。 |
int | getTimezoneOffset() 已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。 |
java.util.Calendar
public abstract class Calendar 是个抽象类:
可以使用已知子类去new对象:
也可以使用类中提供的方法来获取一个实例:
static Calendar | getInstance() 使用默认时区和语言环境获得一个日历。 |
static Calendar | getInstance(Locale aLocale) 使用默认时区和指定语言环境获得一个日历。 |
static Calendar | getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历。 |
import java.util.*;
import java.text.*;
class CalendarDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
sop(c);
}
}
返回来的Calendar其实就是GregorianCalendar对象:
Calendar有很多字段,如:
static int | YEAR 指示年的 get 和 set 的字段数字。 |
get方法:
int | get(int field) 返回给定日历字段的值。 |
参考上图:得知各字段取值。
import java.util.*;
import java.text.*;
class CalendarDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
/*
Date d = new Date();
sop(d);
//只想获取年,用格式化方法只格式化年:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year = sdf.format(d);//返回的是字符串,不方便做运算
sop(year+"年");//可以使用Integer.parseInt(String)转换,不过比较麻烦。
*/
Calendar c = Calendar.getInstance();
sop(c.get(Calendar.YEAR)+"年");
String[] month = {"一月","二月","三月","四月",
"五月","六月","七月","八月","九月","十月",
"十一月","十二月"};//MONTH字段的值是从0~11,使用查表法。
sop(month[c.get(Calendar.MONTH)]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
String[] week = {" ","星期日","星期一","星期二","星期三","星期四",
"星期五","星期六"};//DAY_OF_WEEK字段的值是从1~7,使用查表法。
sop(week[c.get(Calendar.DAY_OF_WEEK)]);
}
}
除了get获取时间外,还可以通过set方法来设置值:
void | set(int field, int value) 将给定的日历字段设置为给定值。 |
void | set(int year, int month, int date) 设置日历字段 YEAR 、MONTH 和 DAY_OF_MONTH 的值。 |
void | set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR_OF_DAY 和MINUTE 的值。 |
void | set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR 、MINUTE 和SECOND 的值。 |
import java.util.*;
import java.text.*;
class CalendarDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
c.set(2014,3,28); //这里写3代表四月。
printCalendar(c);
}
public static void printCalendar(Calendar c)
{
sop(c.get(Calendar.YEAR)+"年");
String[] month = {"一月","二月","三月","四月",
"五月","六月","七月","八月","九月","十月",
"十一月","十二月"};//MONTH字段的值是从0~11,使用查表法。
sop(month[c.get(Calendar.MONTH)]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
String[] week = {" ","星期日","星期一","星期二","星期三","星期四",
"星期五","星期六"};//DAY_OF_WEEK字段的值是从1~7,使用查表法。
sop(week[c.get(Calendar.DAY_OF_WEEK)]);
}
}
我现在想把时间往后推两年:
abstract void | add(int field, int amount) //参数(字段,偏移量)根据日历的规则,为给定的日历字段添加或减去指定的时间量。 |
import java.util.*;
import java.text.*;
class CalendarDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR,2);
c.add(Calendar.MONTH,-2);
c.add(Calendar.DAY_OF_MONTH,-20);
printCalendar(c);
}
public static void printCalendar(Calendar c)
{
sop(c.get(Calendar.YEAR)+"年");
String[] month = {"一月","二月","三月","四月",
"五月","六月","七月","八月","九月","十月",
"十一月","十二月"};//MONTH字段的值是从0~11,使用查表法。
sop(month[c.get(Calendar.MONTH)]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
String[] week = {" ","星期日","星期一","星期二","星期三","星期四",
"星期五","星期六"};//DAY_OF_WEEK字段的值是从1~7,使用查表法。
sop(week[c.get(Calendar.DAY_OF_WEEK)]);
}
}
两个练习:
1,获取任意年的二月有多少天。
思路:根据指定年设置一个时间就是
c.set(year,2,1)//某一年的3月1日。
c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。
2,获取昨天的现在这个时刻。
c.add(Calenar.DAY_OF_MONTH,-1);
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net