日期格式化和解析
DateTimeFormatter提供了三种用于打印时间/时期的格式器
预定义的格式器
Locale相关的格式器
带有定制模式的格式器
要使用标准的格式器,可以直接调用其format方法。
Locale格式的就是给人类看的
DateTimeFormatter formatter = DateFormatter.ofLocalizedDateTime(FormatStyle.LONG);
String Formatted = formatter.format(apollo11launch);
java.time.format.DateTimeFormatter类被设计用来替代java.util.DateFormat
可以通过制定来定制
formatter = DateTimeFormatter.ofPattern(“E yyyy-MM-dd”);
解析字符串中的日期/时间值,可以使用parse方法
LocalDate chur = LocalDate.parse(“2008-04-25”);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
Calendar ca = Calendar.getInstance();// 得到一个Calendar的实例
ca.setTime(new Date()); // 设置时间为当前时间
//ca.set(2011, 11, 17);// 月份是从0开始的,所以11表示12月
//ca.add(Calendar.YEAR, -1); // 年份减1
ca.add(Calendar.MONTH, -3);// 月份减1
//ca.add(Calendar.DATE, -1);// 日期减1
Date resultDate = ca.getTime(); // 结果
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(resultDate));
DateFormat不是线程安全的
Date,Calender类都是可以变的。
LocalDate,该类的实例是一个不可变对象,只提供了简单信息,不包含当天的时间信息
int year = date.getYear(); //2014
Month month = date.getMonth();//MARCH
int day = date.getDayOfMonth(); //18
DayOfWeek dow = date.getDayOfWeek();//TUESDAY
int len = date.lengthOfMonth();31(days in MArch)
boolean leap = date.isLeapYear(); //false (not a leap year)
你还可以使用工厂方法从系统时钟中获取当前的日期:
LocalDate today = LocalDate.now();
LocalDate date = LocalDate.parse(“2014-03-18”); 静态方法parse是替代DateFormat推荐替代的。
修改时间
LocalDate date2 = date1.withYear(2011); //2011-3-18
LocalDate date3 = date2.withDayOfMonth(25);
LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 9);
相对方式修改时间
LocalDate date2 = date1.plusWeeks(1); 2014-3-25
LocalDate date3 = date2.minusYears(3);
LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS);
打印时间
String s1 = date.format(DateTimeFormatter.BASIC_ISO_DATE); //20140318
String s2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE); //2014-03-18