Date类
类Date表示特定的瞬间,精确到毫秒。在java1.1版本后Date API废弃了很多的方法,官方提倡使用Calender以及使用DateFormat日期格式化类来代替Date中被废弃的诸多方法
Date对象的创建
public Date()
//构建一个jvm所在环境的系统日期时间Date对象
public Date(long date)
//以给定的date参数构建一个Date对象
Date未废弃方法及格式化
public boolean affer(Date when)
public boolean before(Date when)
public int compareTo(Date anotherDate)
public long getTime()
public void setTime(long time)
public String toString()
after方法判断时间先后
public String eqEmpBirth(Employee e0,Employee e2) {
return e0.getBirth().after(e2.getBirth())?"e1的生日比e2大":"e2的生日比e1大";
Employee e0 = new Employee("令狐冲",new Date(new Date().getTime()-1000000));
Employee e2 = new Employee("任盈盈",new Date(new Date().getTime()-100));
System.out.println(new DateSupport().eqEmpBirth(e0, e2));
setTime方法改变Date对象
public Date changeDateStatus(Date date,long num,int tag) {
if(tag>0) {//对date实现增加num时间
date.setTime(date.getTime()+num);
}else {//对date实现减少num时间
date.setTime(date.getTime()-num);
}
return date;
Date d0 = new Date(123456789);
int tag =2;
long num = 100000;
Date d2 = new DateSupport().changeDateStatus(d0, num, tag);
System.out.println(d0.getTime());
System.out.println(d2.getTime());
System.out.println(d0 == d2);
DateFormat抽象类
使用DateFormat抽象类对Date对象进行格式化
DateFormat.getDatelnstance()
//获取DateFormat实例对象
**format(Date)方法实现对给定日期对象的格式化并返回字符串表现形式
Date d0 = new Date(123456789156L);
DateFormat df = DateFormat.getDateInstance();//默认形式实现对给定的date对象格式化
System.out.println(df.format(d0));
使用给定的格式化创建DateFormat
//使用给定的格式化创建DateFormat
DateFormat df0 = DateFormat.getDateInstance(DateFormat.MEDIUM);
System.out.println("以MEDIUM样式格式化日期对象"+df0.format(d0));
SimpleDateFormat类
SimpleDateFormat继承自DateFormat类,可提供自定义格式的转换规则
public SimpleDateFormat()
//以默认(yy-M-dd ah:m)的模式和语言环境的日期格式构造对象
public SimpleDateFormat(String pattern)
//以给定的pattern模式和默认语言环境的日期格式构造对象
public SimpleDateFormat(String pattern,Locale locale)
//以给定的pattern模式和locale语言环境的日期格式构造对象
SimpleDateFormat类给定的形式及地区格式化日期对象
Date d0 = new Date(123456789156L);
SimpleDateFormat sdf =new SimpleDateFormat();
System.out.println("SimpleDateFormat默认形式格式化日期对象"+ sdf.format(d0));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd a",Locale.US);//给定格式化标记及地区
System.out.println("SimpleDateFormat以给定的形式及地区格式化日期对象"+sdf2.format(d0));
format方法
public String format(Date date)
//格式化Date对象为字符串
parse方法
public Date parse(String dateStr)
//格式化字符串为Date对象方法
格式化字符标准及含义
字母 | 日期或时间元素 | 表示 |
---|---|---|
G | Rra 标识符(公元) | Text |
y/Y | 年 | Year |
M | 年中的月份 | Month |
w | 年中的周数 | Number |
W | 月份中的周数 | Number |
D | 年中的天数 | Number |
d | 月份中的天数 | Number |
F | 月份中的星期 | Number |
E | 星期中的天数 | Text |
a | Am/pm 标记(上午,下午) | Text |
H | 一天中的小时数(0-23) | Number |
k | 一天中的小时数(1-24) | Number |
K | am/pm中的小时数(0-11) | Number |
h | am/pm中的小时数(1-12) | Number |
m | 小时中的分秒数 | Number |
s | 分钟中的秒数 | Number |
S | 毫秒数 | Number |
z | 时区 | General time zone |
Z | 时区 | RFC 822 time zone |
思考题
1.将给定的员工生日按照给定的日期部分进行更改
可能对年份进行增减,可能对月份进行增减,可能对天进行增减
2.将给定的日期对象格式化为指定的字符串格式返回
3.将给定的2个日期进行比较,返回这两个日期的相差天数的非负值。
第2题答案
public static final String SHORT_TIME = "h:m:s";
public static final String LONG_TIME = "HH:mm:ss SSSS";
public static final String SHORT_DATE = "YY-M-d";
public static final String LONG_DATE = "yyy/MM/dd";
public static final String FULL_DATE_TIME_CHINA = "yyyy年MM月dd日 HH时mm分ss秒 SSSS毫秒";
/**
* 按照给定的样式pattern格式化给定的source Date对象
* @param source 欲被格式化的Date对象
* @param pattern 格式化标准,取自当前FormatDateManagment中的常量
* @return 被格式化后的Date String表示形式
*/
public static String formatDateByPattern(Date source,String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(source);
}
Date d0 = new Date(123456789156L);
String str = FormatDateManagment.formatDateByPattern(d0,FormatDateManagment.FULL_DATE_TIME_CHINA);
System.out.println(str);
使用parse方法将字符串格式化为Date对象
public static Date fromStringtoDateByPattern(String dateStr,String pattern) throws ParseException {
Date target = null;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
target = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return target;
}
String dateStr = "2017-12-24";
Date date1 = FormatDateManagment.fromStringtoDateByPattern(dateStr, FormatDateManagment.SHORT_DATE);
System.out.println(date1.toLocaleString());
Calendar日历类的创建
Calendar类模仿日历功能,Calendar与Date没有任何继承关系,它们不能相互转换;Calender提供了对日期时间操作更灵活的方法支持,可以从Calendar获取与之相对应的Date对象,反之则不可以;SimpleDateFormat不能提供对Calendar的转换支持。
Calendar cal = Calendar.getInstance();//获取与当前系统平台相关的默认日历对象
System.out.println("当前是"+cal.get(Calendar.YEAR)+"年"+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日");
Calendar cal2 = Calendar.getInstance();//获取与给定的locale相关的日历对象
Date japanDate = cal2.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss",Locale.JAPAN).format(japanDate));