I have to convert String "15-08-2021" to DateTime yyyy-MM-dd'T'HH:mm:ss'Z'
''' 嘗試了以下方法,沒有用。
String toDateString= "15-08-2021";
DateTime dt= new DateTime(toDateString);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
DateTime result=formatter.parse(dt);
uj5u.com熱心網友回復:
時間
該java.util日期時間API及API格式,SimpleDateFormat都已經過時,而且容易出錯。建議完全停止使用它們并切換到現代 Date-Time API *。
另外,下面參考的是來自Joda-Time主頁的通知:
請注意,從 Java SE 8 開始,要求用戶遷移到 java.time (JSR-310) - 替代該專案的 JDK 的核心部分。
使用java.time現代日期時間 API 的解決方案:
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("dd-MM-uuuu", Locale.ENGLISH);
LocalDate date = LocalDate.parse("15-08-2021", dtfInput);
ZonedDateTime zdt = date.atStartOfDay(ZoneId.of("UTC"));
System.out.println(zdt);
// Custom format
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
String formatted = dtfOutput.format(zdt);
System.out.println(formatted);
}
}
輸出:
2021-08-15T00:00Z[UTC]
2021-08-15T00:00:00Z
ONLINE DEMO
注意:如果您需要時間不同,您可以通過以下方式進行,同時保持其他內容不變:
LocalDateTime ldt = LocalDateTime.of(LocalDate.parse("15-08-2021", dtfInput), LocalTime.of(21, 0));
ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC);
輸出:
2021-08-15T21:00Z
2021-08-15T21:00:00Z
ONLINE DEMO
從Trail: Date Time 中了解有關現代日期時間 API 的更多資訊。
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
uj5u.com熱心網友回復:
您在使用 Joda-Time 嗎?您可以考慮升級到 java.time,現代 Java 日期和時間 API(您當然不想降級到SimpleDateFormatJava 1.0 和 1.1 以及其他麻煩的日期和時間類)。
使用 Joda 時間
使用 Joda-Time 我會宣告一個這樣的格式化程式來決議:
private static final DateTimeFormatter DATE_PARSER =
DateTimeFormat.forPattern("dd-MM-yyyy")
.withZoneUTC();
然后轉換是這樣的:
String toDateString = "15-08-2021";
DateTime dt = DateTime.parse(toDateString, DATE_PARSER);
System.out.println(dt);
輸出:
2021-08-15T00:00:00.000Z
輸出包括秒的三位小數。這可能不是問題。輸出符合我認為您打算參考的 ISO 8601 標準。如果您需要擺脫它們,則需要第二個格式化程式,但幸運的是,它是內置的:
String formattedDt = dt.toString(ISODateTimeFormat.dateTimeNoMillis());
System.out.println(formattedDt);
2021-08-15T00:00:00Z
考慮 java.time
從 Joda-Time 主頁:
請注意,Joda-Time 被認為是一個很大程度上“已完成”的專案。沒有計劃進行重大改進。如果使用 Java SE 8,請遷移到
java.time(JSR-310)。
對于此選項,請參閱 Arvind Kumar Avinash 的好答案。
你的代碼出了什么問題?
您似乎混淆了格式和決議的概念。您嘗試了 的parse方法SimpleDateFormat。在它的時代,它用于將String預定義格式的 a 轉換為 a Date(另一個過時的類)。我猜你想要大致相反:將 a 格式化為DateTime預定義格式的字串。您的另一個問題是SimpleDateFormat永遠無法處理 Joda-TimeDateTime物件(或任何其他同名類)。
鏈接
- 維基百科文章:ISO 8601
- Joda-Time - 主頁
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/322053.html
