java 字串轉換日期,當你拿到了一組字串,內容是一個日期或是日期與時間的資訊,要轉換成Date,就要用到SimpleDateFormat的物件來幫忙轉換了。
可是,每個國家地區,習慣使用的日期時間格式都不同,會不會轉不過去啊? SimpleDateFormat可以指定特定格時進行轉換,非常彈性的。
SimpleDateFormat 格式代碼
SimpleDateFormat 節錄Api 文件中的代碼表,使用的時候要注意大小寫有別喔!
Letter | Date or Time Component | Presentation | Examples |
G | Era designator | Text |
|
y | Year | Year | 1996 ; 96 |
Y | Week year | Year | 2009 ; 09 |
M | Month in year (context sensitive) | Month | July ; Jul ; 07 |
L | Month in year (standalone form) | Month | July ; Jul ; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day name in week | Text | Tuesday ; Tue |
u | Day number of week (1 = Monday, …, 7 = Sunday) | Number | 1 |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
使用java 字串轉換日期 Convert String to Date
程式碼:
import java.text.SimpleDateFormat;
import java.util.Date;
public class UseStringToDateEx1 {
public static void main(String[] args) throws Exception{
String str="13/06/2023"; //日期格式 日/月/年
Date date=new SimpleDateFormat("dd/MM/yyyy").parse(str); //指定格式要搭配日期中的格式喔
System.out.println(str);
System.out.println(date);
}
}
輸出:
13/06/2023
Tue Jun 13 00:00:00 CST 2023
使用java 字串轉換日期時間
字串中當然也可以有時間的資訊,都可以進行轉換的。
程式碼:
import java.text.SimpleDateFormat;
import java.util.Date;
public class UseStringToDateEx2 {
public static void main(String[] args) throws Exception{
String sDate1="2023-06-13";
String sDate2 = "2023年06月13日";
String sDate3 = "20230613";
String sDate4 = "2023-06-13 14:45:30";
String sDate5 = "2023年06月13日 14時45分30秒";
String sDate6 = "20230613 14:45:30";
SimpleDateFormat formatter1=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat formatter2=new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat formatter3=new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat formatter4=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat formatter5=new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
SimpleDateFormat formatter6=new SimpleDateFormat("yyyyMMdd HH:mm:ss");
Date date1=formatter1.parse(sDate1);
Date date2=formatter2.parse(sDate2);
Date date3=formatter3.parse(sDate3);
Date date4=formatter4.parse(sDate4);
Date date5=formatter5.parse(sDate5);
Date date6=formatter6.parse(sDate6);
System.out.println(sDate1+"\t"+date1);
System.out.println(sDate2+"\t"+date2);
System.out.println(sDate3+"\t"+date3);
System.out.println(sDate4+"\t"+date4);
System.out.println(sDate5+"\t"+date5);
System.out.println(sDate6+"\t"+date6);
}
}
輸出:
2023-06-13 Tue Jun 13 00:00:00 CST 2023
2023年06月13日 Tue Jun 13 00:00:00 CST 2023
20230613 Tue Jun 13 00:00:00 CST 2023
2023-06-13 14:45:30 Tue Jun 13 14:45:30 CST 2023
2023年06月13日 14時45分30秒 Tue Jun 13 14:45:30 CST 2023
20230613 14:45:30 Tue Jun 13 14:45:30 CST 2023
使用java 字串轉換日期時間 LocalDate or LocalDateTime
LocalDate和LocalDateTime是不可變的日期時間對象,分別表示日期、日期和時間。默認情況下,Java 日期採用 ISO-8601 格式,所以如果我們有任何表示這種格式的日期和時間的字符串,那麼我們可以直接使用這些類的parse() API。
日期字串轉 LocalDate
預設的日期格式為 yyyy-MM-dd
程式碼:
import java.time.LocalDate;
public class UseLocalDate2 {
public static void main(String[] args) {
LocalDate date = LocalDate.parse("2018-05-05");
System.out.println(date);
}
}
輸出:
2018-05-05
日期時間字串轉 LocalDateTime
預設的日期時間格式為 yyyy-MM-ddTHH:mm:ss
程式碼:
import java.time.LocalDateTime;
public class UseLocalDate2 {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.parse("2018-05-05T11:50:55");
System.out.println(dateTime);
}
}
輸出:
2018-05-05T11:50:55
DateTimeFormatter指定格式進行轉換LocalDateTime
若要使用非預設的日期時間格式,可以使用java.time.format.DateTimeFormatter,來指定格式進行轉換。
程式碼:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class UseLocalDate3 {
public static void main(String[] args) {
String dateInString = "2023-06-13 14:45:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateInString , formatter);
System.out.println(dateTime);
}
}
輸出:
2023-06-13T14:45:30
原來轉換的時候,可以直接標註中文的年月日啊!
Java 8 之後新的LocalDateTime 可以直接轉字串,可是,如果要寫到資料庫,還是需要再轉為 Date吧!
感謝分享文章,很受用!