日期格式化和解析
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