java時間和字符串之間相互轉(zhuǎn)換幾種方法
1.當前時間對象轉(zhuǎn)字符串
方法一:Date和SimpleDateFormat實現(xiàn)
使用java.util.Date類和java.text.SimpleDateFormat類
public static void main(String[] args) {
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(now);
System.out.println(currentTime);
}方法二:LocalDateTime和DateTimeFormatter
使用java.time.LocalDateTime類和java.time.format.DateTimeFormatter類(Java 8及以上版本)
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String currentTime = now.format(dtf);
System.out.println(currentTime);
}方式三:Calendar
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
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);
String currentTime = String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
System.out.println(currentTime);
}方式四:LocalDate和LocalTime
使用java.time.LocalDate類和java.time.LocalTime類(Java 8及以上版本)
public static void main(String[] args) {
LocalDate currentDate = LocalDate.now();
LocalTime currentTime = LocalTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = currentDate.format(dtf);
String formattedTime = currentTime.format(dtf);
System.out.println(formattedDate + " " + formattedTime);
}2.時間字符串轉(zhuǎn)時間對象
方式一: SimpleDateFormat
String dateString = "2024-10-28 22:56:11";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.parse(dateString);方式二:DateTimeFormatter
DateTimeFormatter有三種解析模式:
- STRICT:嚴格模式,日期、時間必須完全正確。
- SMART:智能模式,針對日可以自動調(diào)整。月的范圍在 1 到 12,日的范圍在 1 到 31。比如輸入是 2 月 30 號,當年 2 月只有 28 天,返回的日期就是 2 月 28 日。默認模式
- LENIENT:寬松模式,主要針對月和日,會自動后延。結(jié)果類似于
LocalData#plusDays或者LocalDate#plusMonths。
SMART智能模式:
testTime("2023-02-33 22:56:11");
testTime("2023-02-30 22:56:11");
private static void testTime(String dateString){
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
try {
LocalDateTime localDateTime = LocalDateTime.parse(dateString, sdf);
System.out.println("轉(zhuǎn)換后時間:" + localDateTime);
} catch (Exception ex) {
System.err.println("轉(zhuǎn)換失敗:" + ex.getMessage());
}
}
LENIENT寬松模式:
testTime("2023-02-33 22:56:11");
testTime("2023-02-30 22:56:11");
private static void testTime(String dateString){
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
.withResolverStyle(ResolverStyle.LENIENT);
try {
LocalDateTime localDateTime = LocalDateTime.parse(dateString, sdf);
System.out.println("轉(zhuǎn)換后時間:" + localDateTime);
} catch (Exception ex) {
System.err.println("轉(zhuǎn)換失敗:" + ex.getMessage());
}
}
STRICT嚴格模式:
嚴格模式下時間字符串的年份格式化分為yyyy和uuuu兩種。當DateTimeFormatter.ofPattern()進行非嚴格模式下的格式化的時候,yyyy/MM/dd和uuuu/MM/dd表現(xiàn)相同,都是轉(zhuǎn)換為合法的日期。
yyyy:
yyyy代表公元紀年,在嚴格模式下,如果時間字符串不包含公元,因此程序報錯。
testTime("2023-02-20 22:56:11");
testTime("2023-02-30 22:56:11");
private static void testTime(String dateString){
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
.withResolverStyle(ResolverStyle.STRICT);
try {
LocalDateTime localDateTime = LocalDateTime.parse(dateString, sdf);
System.out.println("轉(zhuǎn)換后時間:" + localDateTime);
} catch (Exception ex) {
System.err.println("轉(zhuǎn)換失敗:" + ex.getMessage());
}
}
使用G yyyy/MM/dd來進行格式化 ,并且在時間字符串中也增加了公元單位。
testTime("公元 2023-02-20 22:56:11");
testTime("公元 2023-02-30 22:56:11");
private static void testTime(String dateString){
/**
* Locale.JAPAN --> "西暦 yyyy-MM-dd"
* Locale.CHINA --> "公元 yyyy-MM-dd"
* Locale.US --> "AD yyyy-MM-dd"
*/
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("G yyyy-MM-dd HH:mm:ss",Locale.CHINESE)
.withResolverStyle(ResolverStyle.STRICT);
try {
LocalDateTime localDateTime = LocalDateTime.parse(dateString, sdf);
System.out.println("轉(zhuǎn)換后時間:" + localDateTime);
} catch (Exception ex) {
System.err.println("轉(zhuǎn)換失敗:" + ex.getMessage());
}
}
uuuu:
uuuu不代表公元格式化,所以不會存在異常。
testTime("2023-02-20 22:56:11");
testTime("2023-02-29 22:56:11");
private static void testTime(String dateString){
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")
.withResolverStyle(ResolverStyle.STRICT);
try {
LocalDateTime localDateTime = LocalDateTime.parse(dateString, sdf);
System.out.println("轉(zhuǎn)換后時間:" + localDateTime);
} catch (Exception ex) {
System.err.println("轉(zhuǎn)換失敗:" + ex);
}
}
總結(jié)
到此這篇關于java時間和字符串之間相互轉(zhuǎn)換幾種方法的文章就介紹到這了,更多相關java時間和字符串轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot如何監(jiān)控Redis中某個Key的變化(自定義監(jiān)聽器)
這篇文章主要介紹了SpringBoot如何監(jiān)控Redis中某個Key的變化(自定義監(jiān)聽器),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
springboot項目連接多種數(shù)據(jù)庫該如何操作詳析
在Spring Boot應用中連接多個數(shù)據(jù)庫或數(shù)據(jù)源可以使用多種方式,下面這篇文章主要給大家介紹了關于springboot項目連接多種數(shù)據(jù)庫該如何操作的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08
Java面試Socket編程常用參數(shù)設置源碼問題分析
這篇文章主要為大家介紹了Java編程中關于Socket結(jié)構(gòu)分析,常用參數(shù)設置源碼示例以及面試中的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03
關于JAVA11中圖片與BASE64相互轉(zhuǎn)換的實現(xiàn)
這篇文章主要介紹了關于JAVA11中圖片與BASE64相互轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04

