Date类
public classDateTest{public static voidmain(String[] args){
Date d1= newDate();//获取当前时间之后100ms的时间
Date d2 = new Date(System.currentTimeMillis() + 10000);
System.out.println(d1);
System.out.println(d2);//比较d1,d2是否相等,相等返回0,大于返回1,小于返回-1.
System.out.println(d1.compareTo(d2));//判断d1在d2之前/之后
System.out.println(d1.before(d2));
System.out.println(d1.after(d2));
}
}
Calendar类
//创建一个默认的Calendar对象
Calendar calenadar =Calendar.getInstance();//从Calendar对象中取出Date对象
Date date =calendar.getTime();//通过Date对象获得对应的Calendar对象
Calendar calendar2 =Calendar.getInstance();
calendar2.setTime(date);
Calendar访问、修改日期时间的方法:
importjava.util.Calendar;//静态导入Calendar类里所有类变量,可以直接使用YEAR、MONTH等
import static java.util.Calendar.*;public classa{public static voidmain(String[] args){
Calendar c=Calendar.getInstance();//取出年、月、日
System.out.println(c.get(YEAR)+" "+c.get(MONTH)+" "+c.get(DATE));//设置年、月、日、小时、分钟、秒
c.set(2003,10,23,12,32,23);//将Calendar的年往前推2年
c.add(YEAR,-2);//与add类似,但不会向上一个字段进位
c.roll(MONTH,3);
}
}
1.设置Calendar的容错性
Calendar cal =Calendar.getInstance();//YEAR+1,MONTH+1
cal.set(MONTH,13);//关闭容错性
cal.setLenient(false);//程序运行异常
cal.set(MONTH,13);
2.set()方法延迟修改
尽管set(f,value)方法的日历字段f是立即修改的,但Calendar的时间不会立即修改,知道下次调用get(),getTime(),getTimeMillis(),add()或roll()时才会修改日历的时间。
Calendar cal =Calendar.getInstance();
cal.set(2003,7,31);//将月份设为9,但9月31日不存在。
cal.set(MONTH,8);//如果立即修改,cal会设为10月1日
System.out.println(cal.getTime());//再设置DATE字段,输出2003-10-5
cal.set(DATE,5);
System.out.println(cal.getTime());//如果不立即修改,cal仅将MONTH修改为9月//System.out.println(cal.getTime());//再设置DATE字段,输出2003-9-5
cal.set(DATE,5);
System.out.println(cal.getTime());
DateFormat格式化日期、时间
getDateInstance():返回一个日期格式器,只有日期,没有时间
getTimeInstance():返回一个时间格式器,只有时间,没有日期
getDateTimeInstance():返回一个时间格式器,既有时间,也有日期
日期样式、时间样式,DateFormat的四个静态常量:FULL、LONG、MEDIUM、SHORT
importjava.text.DateFormat;//静态导入DateFormat类里所有类变量,可以直接使用FULL、LONG、MEDIUM、SHORT等
import static java.text.DateFormat.*;importjava.util.Locale;importjava.util.Date;public classa{public static voidmain(String[] args){
Date dt= newDate();
Locale locale=Locale.CHINA;
DateFormat df1=DateFormat.getDateInstance(FULL,locale);
DateFormat df2=DateFormat.getTimeInstance(FULL,locale);
System.out.println(df1.format(dt));
System.out.println(df2.format(dt));
}
}
DateFormat的parse()方法可以把一个字符串解析成Date对象,但要求被解析的字符串必须符合日期字符串的要求。缺点:不够灵活,为了更好地格式化日期、解析日期字符串,Java提供了SimpleDateFormat类
SimpleDateFormat格式化日期
importjava.text.SimpleDateFormat;importjava.util.Date;importjava.text.ParseException;public classa{public static voidmain(String[] args)throwsParseException{
Date d= newDate();
SimpleDateFormat sdf1= new SimpleDateFormat("Gyyyy年中第D天");//公元2018年中第160天
String dateStr =sdf1.format(d);
String str= "14###3月##21";
SimpleDateFormat sdf2= new SimpleDateFormat("yy###M月##dd");
System.out.println(sdf2.parse(str));
}
}
Java8新增的DateTimeFormatter格式器类
DateTimeFormatter相当于DateFormat和SimpleDateFormat的合体类,功能非常强大
1.使用DateTimeFormatter完成格式化
importjava.time.format.DateTimeFormatter;importjava.time.format.FormatStyle;importjava.time.LocalDateTime;public classa{public static voidmain(String[] args){
DateTimeFormatter[] formatters= newDateTimeFormatter[]{//直接使用常量创建DateTimeFormatter格式器
DateTimeFormatter.ISO_LOCAL_DATE,
DateTimeFormatter.ISO_LOCAL_TIME,
DateTimeFormatter.ISO_LOCAL_DATE_TIME,//使用本地化的不同风格来创建DateTimeFormatter格式器
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.MEDIUM),
DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG),//根据模式字符串来创建DateTimeFormatter格式器
DateTimeFormatter.ofPattern("Gyyyy%%MMM%dd HH:mm:ss")
};
LocalDateTime date=LocalDateTime.now();for(int i = 0 ; i < formatters.length ; i++){//下面两行代码作用相同//System.out.println(date.format(formatters[i]));
System.out.println(formatters[i].format(date));
}
}
}
2.使用DateTimeFormatter解析字符串
importjava.time.format.DateTimeFormatter;importjava.time.LocalDateTime;public classa{public static voidmain(String[] args){
String str1= "2011@@02@@04 01时02分03秒";
DateTimeFormatter formatter1= DateTimeFormatter.ofPattern("yyyy@@MM@@dd HH时mm分ss秒");
LocalDateTime dt1=LocalDateTime.parse(str1,formatter1);
System.out.println(dt1);
}
}