JAVA基础类库(二)-----日期、时间类和格式器
Date类
public class DateTest{ public static void main(String[] args){ Date d1 = new Date(); //获取当前时间之后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访问、修改日期时间的方法:
import java.util.Calendar; //静态导入Calendar类里所有类变量,可以直接使用YEAR、MONTH等 import static java.util.Calendar.*; public class a{ public static void main(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
import java.text.DateFormat; //静态导入DateFormat类里所有类变量,可以直接使用FULL、LONG、MEDIUM、SHORT等 import static java.text.DateFormat.*; import java.util.Locale; import java.util.Date; public class a{ public static void main(String[] args){ Date dt = new Date(); 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格式化日期
import java.text.SimpleDateFormat; import java.util.Date; import java.text.ParseException; public class a{ public static void main(String[] args) throws ParseException{ Date d = new Date(); 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完成格式化
import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; import java.time.LocalDateTime; public class a{ public static void main(String[] args){ DateTimeFormatter[] formatters = new DateTimeFormatter[]{ //直接使用常量创建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解析字符串
import java.time.format.DateTimeFormatter; import java.time.LocalDateTime; public class a{ public static void main(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); } }
浙公网安备 33010602011771号