本地化日期时间 API
LocalDateTime 类可以在处理时区不是必须的情况。代码如下:
testLocalDateTime
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;
public class dateLocalDateTimeApi {
public static void main(String[] args) {
dateLocalDateTimeApi java8tester = new dateLocalDateTimeApi();
java8tester.testLocalDateTime();
}
/*
* 本地化日期时间 API
* LocalDate/LocalTime 和 LocalDateTime 类可以在处理时区不是必须的情况。代码如下:
* testLocalDateTime
*/
private void testLocalDateTime() {
// 获取当前的日期时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间: " + currentTime);
LocalDate date1 = currentTime.toLocalDate();
System.out.println("date1: " + date1);
Month month = currentTime.getMonth();
int day = currentTime.getDayOfMonth();
int seconds = currentTime.getSecond();
System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds);
LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
System.out.println("date2: " + date2);
// 12 december 2014
LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
System.out.println("date3: " + date3);
// 22 小时 15 分钟
LocalTime date4 = LocalTime.of(22, 15);
System.out.println("date4: " + date4);
// 解析字符串
LocalTime date5 = LocalTime.parse("20:15:30");
System.out.println("date5: " + date5);
}
}
使用时区的日期时间API
如果我们需要考虑到时区,就可以使用时区的日期时间API:
dateZonedDateTimeApi
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class dateZonedDateTimeApi {
public static void main(String args[]){
dateZonedDateTimeApi java8tester = new dateZonedDateTimeApi();
java8tester.testZonedDateTime();
}
public void testZonedDateTime(){
// 获取当前时间日期
ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]");
System.out.println("date1: " + date1);
ZoneId id = ZoneId.of("Europe/Paris");
System.out.println("ZoneId: " + id);
ZoneId currentZone = ZoneId.systemDefault();
System.out.println("当期时区: " + currentZone);
}
}
其他时间处理
LocalDate
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.LocalDate;
import java.time.ZoneId;
public class localDateApi {
public static void main(String args[]){
// 1. 获取当前日期(年-月-日)
LocalDate localDate = LocalDate.now();
System.out.println(localDate.toString());
// 2. 根据年月日构建Date
LocalDate localDate1 = LocalDate.of(2020, 01, 30);
// 3. 字符串转换日期,默认按照yyyy-MM-dd格式,也可以自定义格式
LocalDate localDate2 = LocalDate.parse("2020-01-30");
// 4. 获取本月第一天
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
// 5. 获取本月第二天
LocalDate secondDayOfMonth = localDate.withDayOfMonth(2);
// 6. 获取本月最后一天
LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
// 7. 明天 -----打印输出
LocalDate tomorrowDay = localDate.plusDays(1L);
// 8. 昨天 -----打印输出
LocalDate yesterday = localDate.minusDays(1L);
// 9. 获取本年第12天
LocalDate day = localDate.withDayOfYear(120);
// 10. 计算两个日期间的天数
long days = localDate.until(localDate1, ChronoUnit.DAYS);
System.out.println(days);
// 11. 计算两个日期间的周数
long weeks = localDate.until(localDate1, ChronoUnit.WEEKS);
System.out.println(weeks);
}
同样,和LocalDate相对应的另一个类就是LocalTime,这个类恰好和LocalDate相反,它表示的全是时间,不包含日期。例子如下:
LocalTime
import java.time.LocalTime;
public class localTimeApi {
public static void main(String args[]){
// 1. 获取当前时间,包含毫秒数 -----打印输出----- 17:40:08.393
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
// 2. 构建时间 -----打印输出----- 12:15:30
LocalTime localTime1 = LocalTime.of(12, 15, 30);
System.out.println(localTime1);
// 3. 获取当前时间,不包含毫秒数 -----打印输出----- 17:40:08
LocalTime localTime2 = localTime.withNano(0);
System.out.println(localTime2);
// 4. 字符串转为时间,还可以有其他格式,比如12:15, 12:15:23.233
// -----打印输出----- 12:15:30
LocalTime localTime3 = LocalTime.parse("12:15:30");
System.out.println(localTime3);
}
}
LocalDateTime
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/*
* LocalDateTime就和原先的java.util.Date很像了,
* 既包含日期,又包含时间,它经常和DateTimeFormatter一起使用。
*/
public class dateLocalDateTimeApi {
public static void main(String args[]){
// 1. 获取当前年月日 时分秒 -----打印输出----- 2020-01-08T17:49:36.226
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
// 2. 通过LocalDate和LocalTime构建 ----- 打印输出----- 2020-01-08T17:49:36.226
LocalDateTime localDateTime1 = LocalDateTime.of(LocalDate.now(), LocalTime.now());
System.out.println(localDateTime1);
// 3. 构建年月日 时分秒 -----打印输出----- 2020-01-29T19:23:13
LocalDateTime localDateTime2 = LocalDateTime.of(202, 01, 29, 19, 23, 13);
System.out.println(localDateTime2);
// 4. 格式化当前时间 ----打印输出----- 2020/01/29
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(formatter.format(localDateTime2));
//使用LocalDateTime的with开头的方法可以设置相应的时间,小时,分钟等,比如:
// 设置分钟数
//5、打印输出----2020-01-08T17:23:36.239
LocalDateTime localDateTime3 = LocalDateTime.now().withMinute(23);
System.out.println(localDateTime3);
}
}
TemporalAdjusters
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
/*
* 该类是一个计算用的类,提供了各种各样的计算方法。比如某个月的第一天,某个月的最后一天,
* 某一年的第一天,某一年的第几天等各种计算方法。
* 该类内部实现基本上全都是通过JDK8的Lambda表达式来实现的。随便举一些例子,都很简单。
*
*/
public class dateTemporalAdjustersApi {
public static void main(String args[]){
LocalDate localDate = LocalDate.now();
// 1. 本月第一天
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println(firstDayOfMonth);
// 2. 本月最后一天
LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(lastDayOfMonth);
// 3. 本年第一天
LocalDate firstDayOfYear = localDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println(firstDayOfYear);
// 4. 下个月第一天
LocalDate firstDayOfNextMonth = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println(firstDayOfNextMonth);
// 5. 本年度最后一天
LocalDate lastDayOfYear = localDate.with(TemporalAdjusters.lastDayOfYear());
System.out.println(lastDayOfYear);
}