如何解决如何使用 DateTimeFormatter
嗨,我正在尝试使用 String
将 DateTimeFormatter
转换为日期,
例如 "20210628"
到 "Mon Jun 28 00:00:00 UTC 2021"
。
使用 SimpleDateFormatter
可以轻松实现,但我想使用 DateTimeFormatter
来实现。
解决方法
java.time
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
使用 java.time
(现代日期时间 API)的解决方案:
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("uuuuMMdd",Locale.ENGLISH);
LocalDate date = LocalDate.parse("20210628",dtfInput);
OffsetDateTime odt = date.atTime(OffsetTime.of(LocalTime.MIN,ZoneOffset.UTC));
System.out.println(odt);
// Custom format
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O uuuu",Locale.ENGLISH);
System.out.println(dtfOutput.format(odt));
}
}
输出:
2021-06-28T00:00Z
Mon Jun 28 00:00:00 GMT 2021
或者,
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("uuuuMMdd",dtfInput);
ZonedDateTime zdt = date.atStartOfDay(ZoneId.of("Etc/UTC"));
System.out.println(zdt);
// Custom format
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O uuuu",Locale.ENGLISH);
System.out.println(dtfOutput.format(zdt));
}
}
输出:
2021-06-28T00:00Z[Etc/UTC]
Mon Jun 28 00:00:00 GMT 2021
从 Trail: Date Time 了解有关现代 Date-Time API 的更多信息。
,另一种使用 java.time
的方法...
使用 DateTimeFormatterBuilder
可以完全控制 String
转换。
这里有一个小例子,它真正在所需的输出中打印 UTC
而不是 GMT
或 Z
:
public static void main(String[] args) {
// example String
String value = "20210628";
// define a formatter that parses the example String
DateTimeFormatter dateParser = DateTimeFormatter.ofPattern("uuuuMMdd");
// define a formatter that converts to a String as desired
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendPattern("EEE MMM dd HH:mm:ss")
.appendLiteral(' ')
.appendZoneRegionId()
.appendLiteral(' ')
.appendPattern("uuuu")
.toFormatter(Locale.ENGLISH);
// parse the date and use the formatter in order to get the desired result
String otherValue = LocalDate.parse(value,dateParser)
// add the start of the day
.atStartOfDay()
// apply the desired zone
.atZone(ZoneId.of("UTC"))
// and format it
.format(dtf);
// finally print the conversion
System.out.println(value + " ---> " + otherValue);
}
输出如下:
20210628 ---> Mon Jun 28 00:00:00 UTC 2021
,
如果您已经有一个 LocalDateTime 对象,那么您可以使用以下内容。
String getFormattedDate(LocalDateTime datetime){
DateTimeFormatter formatterPreUTC = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss");
DateTimeFormatter formatterPostUTC = DateTimeFormatter.ofPattern("YYYY");
String textPreUTCPart = datetime.format(formatterPreUTC);
String utc = " UTC ";
String textPostUTCPart = datetime.format(formatterPostUTC);
return textPreUTCPart + utc + textPostUTCPart;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。