System.out.println(date.toLocaleString());
// 转换为 GMT 时区
System.out.println(date.toGMTString());
}
}
-
预定义的字符串
-
yyyy
:年 -
MM
:月 -
dd
:日 -
HH
:小时 -
mm
:分钟 -
ss
:秒 -
存在的问题
-
不能转换时区;
-
无法对日期和时间进行运算操作;
Calendar
可用于获取并设置年、月、日、时、分、秒,比 Date
多了一个可以作简单日期和时间运算的功能;
- 基本用法
import java.util.*;
public class Main{
public staitc void main(String[] args) throws Exception{
// 获取当前时间
Calendar cal = Calendar.getInstance();
// 获取年、月、日、时、分、秒
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
}
}
- 利用
getTime()
方法,可以将一个Calendar
对象转换为Date
对象,然后利用SimpleDateFormat
进行格式化;
TimeZone
相较于 Date
和 Calendar
,提供了时区转换功能,主要步骤如下:
-
清除所有字段;
-
设定指定时区;
-
设定日期和时间;
-
创建
SimpleDateFormat
并设定目标时区; -
格式化获取的
Date
对象(对象无时区信息,时区信息存储在SimpleDateFormat
中);
import java.util.*;
import java.text.*;
public class Main{
public static void main(String[] args) throws Exception{
Calendar cal = Calendar.getInstance();
cal.clear();
// 设定时区
cal.setTimeZone(TimZone.getTimeZone(“Asia/Shanghai”));
// 设定时间
cal.set(2020, 3 /* 4 月 */, 25, 13, 30, 0);
// 显示时间:
var sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
sdf.setTimeZone(TimeZone.getTimeZone(“America/New_York”));
System.out.println(sdf.format(c.getTime()));
}
}
-
Java 8 引入
java.time
中所提供的新的时间和日期 API,主要涉及的类型: -
本地日期和时间:
LocalDateTime、LocalDate、LocalTime
-
带时区的日期和时间:
ZonedDateTime
-
时刻:
Instant
-
时区:
ZoneId、ZoneOffset
-
时间间隔:
Duration
-
格式化:
DateTimeFormatter
-
基本用法
import java.time.*;
public class Main{
public static void main(String[] args) throws Exception{
// 当前日期
LocalDate date = LocalDate.now();
// 当前时间
LocalTime time = LocalTime.now();
// 当前日期和时间
LocalDateTime dateTime = LocalDateTime.now();
}
}
-
输出标准为 ISO 8601,日期和时间之间的分割符是
T
,规定的标准格式如下: -
日期:
yyyy-MM-dd
-
时间:
HH:mm:ss
-
带毫秒的时间:
HH:mm:ss.SSS
-
日期和时间:
yyyy-MM-dd T HH:mm:ss
-
带毫秒的日期和时间:
yyyy-MM-dd T HH:mm:ss.SSS
-
对日期和时间进行调整:
-
年:
withYear()
-
月:
withMonth()
-
日:
withDayOfMonth()
-
时:
withHour()
-
分:
withMinute()
-
秒:
withSecond()
-
Duration
和Period
-
Duration
:表示两个时刻间的时间间隔; -
Period
:表示两个日期之间的天数;
用于表示带时区的日期和时间;
- 时区转换及本地时间转换
import java.time.*;
public class Main{
public static void main(String[] args) throws Exception{
ZonedDateTime zoneTime = ZonedDateTime.now(ZoneId.of(“Asia/Shanghai”));
// 中国时区转换为纽约时间
ZonedDateTime newZoneTime = zoneTime.withZoneSameInstant(ZoneId.of(“America/New_York”));
// 转换为本地时间
LocalDateTime local = zoneTime.toLocalDateTime();
System.out.println(zoneTime);
System.out.println(newZoneTime);
}
}
相较于 SimpleDateFormat
,DateTimeFormatter
不仅是不变对象,还是线程安全的,有如下两种使用方式;
- 传入格式化字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”)
- 传入格式化字符串同时指定
Locale
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“E, yyyy-MM-dd HH:mm:ss”, Locale.US)
- 对比效果
import java.time.*;
import java.time.format.*;
import java.util.Locale;
public class Main{
public static void main(String[] args) throws Exception{
ZonedDateTime zdt = ZonedDateTime.new();
var formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd’T’HH:mm ZZZZ”);
System.out.println(formatter.format(zdt));
var zhFormatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd EE HH:mm”, Locale.CHINA);
System.out.println(zhFormatter.format(zdt));
var usFormatter = DateTimeFormatter.ofPattern(“E, MMMM/dd/yyyy EE HH:mm”, Locale.US);
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
qqb89-1715703197748)]
[外链图片转存中…(img-qRp4OwA1-1715703197749)]
[外链图片转存中…(img-IdtXIgZM-1715703197749)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!