在 Java 中将一种日期时间格式转换为另一种日期时间格式
Converting one date time format into another in Java
我遇到一种情况,我需要将一种 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";
incomingDate = 2021-10-22T06:39:13Z
和离职日期 = 2021-10-22T06:39:13Z
我敢肯定这可能只是最幼稚的尝试。
我试过标准化日期格式,然后重新格式化,但不行。
我只是有点精疲力竭。
一如既往,非常感谢来自这个令人难以置信的社区的任何和所有帮助!
更新
我只是想指出此方法的输入和输出类型为“即时”。
抱歉一开始没有说清楚。
I have to convert from yyyy-MM-dd'T'HH:mm:ss
to 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
,这是一个分区日期时间,可以 parsed-from/formatted-to 使用
DateTimeFormatter.ISO_ZONED_DATE_TIME
.
在格式模式末尾追加时区'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));
}
}
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.
看到这个code run live at IdeOne.com。
10/22/2021 06:39:13
详情
你说:
incomingDate = 2021-10-22T06:39:13Z
您的格式设置模式与您输入的字符串不匹配。
您输入的字符串恰好符合 Instant.parse
中默认使用的 ISO 8691 格式。因此无需指定格式模式。
Instant instant = Instant.parse( "2021-10-22T06:39:13Z" ) ;
末尾的Z
表示与UTC本初子午线的偏移量为零时分秒。
您要求以 MM/dd/yyyy HH:mm:ss 的格式生成表示该时刻的文本。我建议包括偏移量或时区的指示符。但如果你坚持要忽略它,请继续阅读。
从基本的 class Instant
转换为更灵活的 OffsetDateTime
class.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
指定格式模式。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu HH:mm:ss" ) ;
生成您想要的文本。
String output = odt.format( f ) ;
要了解更多信息,请搜索 Stack Overflow。这些主题已被多次提及。
我遇到一种情况,我需要将一种 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";
incomingDate = 2021-10-22T06:39:13Z 和离职日期 = 2021-10-22T06:39:13Z
我敢肯定这可能只是最幼稚的尝试。 我试过标准化日期格式,然后重新格式化,但不行。
我只是有点精疲力竭。 一如既往,非常感谢来自这个令人难以置信的社区的任何和所有帮助!
更新
我只是想指出此方法的输入和输出类型为“即时”。 抱歉一开始没有说清楚。
I have to convert from
yyyy-MM-dd'T'HH:mm:ss
toMM/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
,这是一个分区日期时间,可以 parsed-from/formatted-to 使用
DateTimeFormatter.ISO_ZONED_DATE_TIME
.
在格式模式末尾追加时区'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));
}
}
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.
看到这个code run live at IdeOne.com。
10/22/2021 06:39:13
详情
你说:
incomingDate = 2021-10-22T06:39:13Z
您的格式设置模式与您输入的字符串不匹配。
您输入的字符串恰好符合 Instant.parse
中默认使用的 ISO 8691 格式。因此无需指定格式模式。
Instant instant = Instant.parse( "2021-10-22T06:39:13Z" ) ;
末尾的Z
表示与UTC本初子午线的偏移量为零时分秒。
您要求以 MM/dd/yyyy HH:mm:ss 的格式生成表示该时刻的文本。我建议包括偏移量或时区的指示符。但如果你坚持要忽略它,请继续阅读。
从基本的 class Instant
转换为更灵活的 OffsetDateTime
class.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
指定格式模式。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu HH:mm:ss" ) ;
生成您想要的文本。
String output = odt.format( f ) ;
要了解更多信息,请搜索 Stack Overflow。这些主题已被多次提及。