我有一種情況,我需要將一種 Java 日期時間格式轉換為另一種格式,但一直有一段時間這樣做。一直在尋找解決方案很長一段時間,并嘗試了很多沒有用的東西,但我不知所措:(。
我必須從 yyyy-MM-dd'T'HH:mm:ss 轉換 為 MM/dd/yyyy HH:mm:ss
這是我嘗試過的最后一件事,但可惜它對轉換模式根本沒有影響:
private Instant convertInstantFormat(Instant incomingDate) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(AUTH_DATE_PATTERN)
.withZone(ZoneId.systemDefault());
return Instant.parse(formatter.format(incomingDate));
}
在哪里
AUTH_DATE_PATTERN = "MM/dd/yyyy HH:mm:ss";
傳入日期 = 2021-10-22T06:39:13Z 和傳出日期 = 2021-10-22T06:39:13Z
我敢肯定,這可能只是最幼稚的嘗試。我試過標準化日期格式,然后重新格式化,但沒有成功。
我只是有點筋疲力盡。與往常一樣,非常感謝來自這個令人難以置信的社區的任何和所有幫助!
更新
我只是想指出這個方法的輸入和輸出是“即時”型別的。很抱歉最初沒有明確說明這一點。
uj5u.com熱心網友回復:
我必須轉換
yyyy-MM-dd'T'HH:mm:ss為MM/dd/yyyy HH:mm:ss
您的傳入日期時間格式為 ISO_LOCAL_DATE_TIME。
String datetime = "2021-12-16T16:22:34";
LocalDateTime source = LocalDateTime.parse(datetime,DateTimeFormatter.ISO_LOCAL_DATE_TIME);
// desired output format
String AUTH_DATE_PATTERN = "MM/dd/yyyy HH:mm:ss";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(AUTH_DATE_PATTERN);
String output = source.format(formatter);
System.out.println(output);
印刷
12/16/2021 16:22:34
如果您的傳入日期是2021-10-22T06:39:13Z磁區日期時間并且可以使用
DateTimeFormatter.ISO_ZONED_DATE_TIME.
uj5u.com熱心網友回復:
tl;博士
Instant // Represents a point on the time line.
.parse( "2021-10-22T06:39:13Z" ) // Returns an `Instant` object. By default, parses text in standard ISO 8601 for at where `Z` means offset of zero.
.atOffset( ZoneOffset.UTC ) // Returns an `OffsetDateTime` object.
.format(
DateTimeFormatter.ofPattern( "MM/dd/uuuu HH:mm:ss" )
) // Returns a `String` object.
在 IdeOne.com 上查看此代碼的實時運行情況。
10/22/2021 06:39:13
細節
你說:
incomingDate = 2021-10-22T06:39:13Z
您的格式模式與您的輸入字串不匹配。
您的輸入字串恰好符合Instant.parse. 所以不需要指定格式模式。
Instant instant = Instant.parse( "2021-10-22T06:39:13Z" ) ;
該Z對端裝置的一個的零小時-分鐘-秒從UTC的本初子午線偏移。
您要求以 MM/dd/yyyy HH:mm:ss 格式生成表示該時刻的文本。我建議包括偏移或時區的指標。但如果你堅持省略,請繼續閱讀。
從基本類Instant轉換為更靈活的OffsetDateTime類。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
指定格式模式。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu HH:mm:ss" ) ;
生成您想要的文本。
String output = odt.format( f ) ;
要了解更多資訊,請搜索 Stack Overflow。這些話題已經被多次提及。
uj5u.com熱心網友回復:
在格式模式的末尾附加時區“z”資訊,否則決議會引發例外。
這是一個作業示例。
單元測驗(通過)
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class DateFormatConverterTest {
@Test
void convertDate() {
final String incomingDate = "2021-10-22T06:39:13Z";
final String expectedOutgoingDate = "2021/10/22T06:39:13Z";
String actualOutgoingDate = new DateFormatConverter().convertDate(incomingDate);
assertThat(actualOutgoingDate).isEqualTo(expectedOutgoingDate);
}
}
執行
import java.time.format.DateTimeFormatter;
public class DateFormatConverter {
private static final DateTimeFormatter INCOMING_DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz");
private static final DateTimeFormatter OUTGOING_DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy/MM/dd'T'HH:mm:ssz");
String convertDate(String incoming) {
return OUTGOING_DATE_TIME_FORMAT.format(INCOMING_DATE_TIME_FORMAT.parse(incoming));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385649.html
標籤:爪哇 约会时间 日期时间格式 数据转换 日期时间格式化程序
下一篇:將資料幀從時間戳轉換為時間間隔
