java时间日期格式转换Java基础之Java8的时间⼯具类Time
java.time包中的是类是不可变且线程安全的。新的时间及⽇期API位于java.time中,下⾯是⼀些关键类
●Instant——它代表的是时间戳
●LocalDate——不包含具体时间的⽇期,⽐如2014-01-14。它可以⽤来存储⽣⽇,周年纪念⽇,⼊职⽇期等。
●LocalTime——它代表的是不含⽇期的时间
●LocalDateTime——它包含了⽇期及时间,不过还是没有偏移信息或者说时区。
●ZonedDateTime——这是⼀个包含时区的完整的⽇期时间,偏移量是以UTC/格林威治时间为基准的。
这些类都是被final修饰的类
java8是如何处理时间及⽇期的
1、如何在java8中获取当天的⽇期
java8中有个叫LocalDate的类,能⽤来表⽰今天的⽇期。这个类与java.util.Date略有不同,因为它只包含⽇期,没有时间。
import java.time.LocalDate;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
LocalDate localDate = w();
System.out.println(localDate);
}
}
输出结果是
2019-06-06
可以看到,他创建了今天的⽇期却不包含时间信息,并且格式化了⽇期
2、如何在java8中获取当前的年⽉⽇
LocalDate类中提供了⼀些很⽅便的⽅法可以⽤来提取年⽉⽇以及其他的⽇期属性,特别⽅便,只需要使⽤对应的getter⽅法就可以了,⾮常直观
public class Test {
public static void main(String[] args){
LocalDate localDate = w();
System.out.DayOfMonth());//⼀个⽉的第⼏天
System.out.DayOfYear());//⼀年的第⼏天
System.out.MonthValue());//是哪⼀个⽉
System.out.Year());//是哪⼀年
System.out.DayOfWeek());//是周⼏
}
}
输出结果
6
157
6
2019
THURSDAY
3、在java8中如何获取某个指定的⽇期对象
通过另⼀个⽅法,可以创建出任意⼀个⽇期,它接受年⽉⽇的参数,然后返回⼀个等价的LocalDate实例。在这个⽅法⾥,需要的⽇期你填写什么就是什么,不想之前的API中⽉份必须从0开始
LocalDate localDate = LocalDate.of(2019,6,6);
System.out.println(localDate);
}
}
输出结果是:
2019-06-06
4、在java8中检查两个⽇期是否相等
LocalDate重写了equals⽅法来进⾏⽇期的⽐较,如下所⽰:
public class Test {
public static void main(String[] args){
LocalDate localDate = LocalDate.of(2019,6,6);
LocalDate localDate2 = w();
LocalDate localDate3 = LocalDate.of(2019,6,5);
System.out.println(localDate.equals(localDate2));
System.out.println(localDate2.equals(localDate3));
}
}
输出结果是
true
false
5、在java8中如何检查重复事件对应的特殊⽇期,⽐如⽣⽇
在java中还有⼀个与时间⽇期相关的任务就是检查重复事件,⽐如每⽉的账单⽇ 如何在java中判断是否是某个节⽇或者重复事件,使⽤MonthDay类。这个类由⽉⽇组合,不包含年信息,可以⽤来代表每年重复出现的⼀些⽇期或其他组合。他和新的⽇期库中的其他类⼀样也都是不可变且线程安全的,并且它
还是⼀个值类(value class)。
public class Test {
public static void main(String[] args){
LocalDate localDate = LocalDate.of(1996,02,23);
MonthDay birthDay = MonthDay.Month(), DayOfMonth());
LocalDate today = w();
MonthDay monthDayToDay= MonthDay.from(today);
if(monthDayToDay.equals(birthDay)){
System.out.println("今天是你的⽣⽇");
}else{
System.out.println("今天不是你的⽣⽇");
}
}
输出结果
今天不是你的⽣⽇
通过列⼦可以看到MonthDay只存储了⽉⽇,对⽐两个⽇期的⽉⽇即可知道是否是特定的某个⽇⼦
6、如何在java8中获取当前时间
这个与第⼀个例⼦获取当前⽇期⾮常相似,这⾥⽤的是LocalTime类,默认的格式是hh:mm:ss:nnn
System.out.println(localTime);
}
}
输出的结果
11:21:54.738
可以看到,这个时间是不包含⽇期的
7、如何增加时间⾥⾯的⼩时数
很多时候需要对时间进⾏操作,⽐如加⼀个⼩时来计算之后的时间,java8提供了更⽅便的⽅法 如plusHours,这些⽅法返回的是⼀个新的LocalTime实例的引⽤,因为LocalTime是不可变的
public class Test {
public static void main(String[] args){
LocalTime localTime = w();
System.out.println("现在的时间是:"+localTime);
LocalTime loclaTime2 = localTime.plusHours(3);
System.out.println("三⼩时后的时间是:"+loclaTime2);
}
}
输出结果是:
现在的时间是:11:30:48.135
三⼩时后的时间是:14:30:48.135
8、如何获取1周后的⽇期
这个与前⼀个获取2⼩时后的时间的例⼦很相似,这⾥我们获取的是1周后的⽇期。LocalDate是⽤来表⽰⽆时间的⽇期,他⼜⼀个plus()⽅法可以⽤来增加⽇,星期,⽉,ChronoUnit则⽤来表⽰时间单位,LocalDate也是不可变的,因此任何修改操作都会返回⼀个新的实例
public class Test {
public static void main(String[] args){
LocalDate localDate = w();
System.out.println("现在的⽇期是:"+localDate);
//⼀周后的⽇期
LocalDate localDate2 = localDate.plus(1, ChronoUnit.WEEKS);
System.out.println("⼀周后的⽇期:"+localDate2);
//⼀⽉后的⽇期
LocalDate localDate3 = localDate.plus(1, ChronoUnit.MONTHS);
System.out.println("⼀⽉后的⽇期:"+localDate3);
}
}
输出的结果:
现在的⽇期是:2019-06-06
⼀周后的⽇期:2019-06-13
⼀⽉后的⽇期:2019-07-06
可以看到⼀周后的⽇期是什么,也可以⽤这个⽅法来增加⼀个⽉,⼀年,⼀⼩时,⼀分等等
9、⼀年前后的⽇期
在上个例⼦中我们使⽤了LocalDate的plus()⽅法来给⽇期增加⽇周⽉,现在我们⽤minus()⽅法来出⼀年前的那天
System.out.println("现在的⽇期是:"+localDate);
//⼀年后的⽇期
LocalDate localDate2 = localDate.plus(1, ChronoUnit.YEARS);
System.out.println("⼀年后的⽇期:"+localDate2);
//⼀年前的⽇期
LocalDate localDate3 = localDate.minus(1, ChronoUnit.YEARS);
System.out.println("⼀年前的⽇期:"+localDate3);
}
}
输出结果是:
现在的⽇期是:2019-06-06
⼀年后的⽇期:2020-06-06
⼀年前的⽇期:2018-06-06
10、在java8中使⽤时钟
public class Test {
public static void main(String[] args){
Clock clock= Clock.systemUTC();
//拿到当前的系统时间
System.out.println("当前的系统时间是:"+clock.millis());
System.out.println(System.currentTimeMillis());
//拿到当前的时区
System.out.println("当前的时区是:"+clock.systemDefaultZone());
}
}
输出结果是
当前的系统时间是:1559822512542
1559822512542
当前的时区是;SystemClock[Asia/Shanghai]
11、在java8中如何判断某个⽇期在另⼀个⽇期的前⾯还是后⾯
如何判断某个⽇期在另⼀个⽇期的前⾯还是后⾯或者相等,在java8中,LocalDate类中使⽤isBefore()、isAfter()、equals()⽅法来⽐较两个⽇期。如果调⽤⽅法的那个⽇期⽐给定的⽇期要早的话,isBefore()⽅法会返回true。equals()⽅法在前⾯的例⼦中已经说明了,这⾥就不举例了
public class Test {
public static void main(String[] args){
LocalDate localDate = w();
LocalDate localDate2 = LocalDate.of(2019,05,23);
System.out.println("现在是否是给的⽇期之前:"+localDate.isBefore(localDate2));
System.out.println("现在是否是给的⽇期之后:"+localDate.isAfter(localDate2));
}
}
输出结果是:
现在是否是给的⽇期之前:false
现在是否是给的⽇期之后:true
12、在java8中处理不同的时区
java8中不仅将⽇期和时间进⾏了分离,同时还有时区。⽐如ZonId代表的是某个特定时区,ZonedDateTime代表带时区的时间,等同于以前的GregorianCalendar类。使⽤该类,可以将本地时间转换成另⼀个时区中的对应时间。
//使⽤⼀个准确的时间点来建⽴zonedDateTime,下⾯这段代码对⽣成UTC时间,会⽐北京时间早8个⼩时
ZonedDateTime zonedDateTime = ZonedDateTime.w(), ZoneId.of("UTC"));
System.out.println(zonedDateTime);
//指定时区
LocalDateTime localDateTime = LocalDateTime();
/
/在UTC时区的基础上转化为上海时区
ZonedDateTime zonedDateTime2 = ZonedDateTime.of(localDateTime,ZoneId.of(ZoneId.("CTT")));
System.out.println(zonedDateTime2.plus(8,ChronoUnit.HOURS).toLocalDateTime());
}
}
输出的结果是
转换成字符串的格式是2019-06-0717:16:59
13、YearMonth
正如MonthDay表⽰的是某个重复出现的⽇⼦,YearMonth是另外⼀个组合,你可以⽤这个类出这个⽉有多少天,LengthOfMonth()这个⽅法返回的是这个YearMonth实例对应的⽉有多少天,这对于检查2⽉是否润2⽉很有⽤
public class Test {
public static void main(String[] args){
YearMonth yearMonth = w();
int day = yearMonth.lengthOfMonth();
System.out.println("这个⽉共有"+ day +"天");
YearMonth yearMonth2 = YearMonth.of(2019,2);
int day2 = yearMonth2.lengthOfMonth();
if(day2 ==29){
System.out.println("2019年的2⽉有29天,2019是瑞年");
}else if(day2==28){
System.out.println("2019年的2⽉有28天,2019年是平年");
}
}
}
输出结果是
这个⽉共有30天
2019年的2⽉有28天,2019年是平年
14、如何在java8中检查闰年
public class Test {
public static void main(String[] args){
LocalDate localDate = w();
System.out.Year()+"年是不是瑞年"+localDate.isLeapYear());
}
}
输出的结果是:
2019年是不是瑞年false
15、两个⽇期之间包含多少天,多少⽉,多少年(必须连起来)
计算两个⽇期之间对应相差多少天、⽉、年。可以⽤java.time.Period类完成该功能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论