从给定的字符串中获取 LocalDateTime 对象?
Get a LocalDateTime object from a given string?
"2021-09-17 11:48:06 UTC"
我想解析以下字符串并创建一个 LocalDateTime
对象或一个 Instant
我知道你可以这样写
String dateTime = "2021-09-17 11:48:06 UTC";
LocalDateTime dt = LocalDateTime.parse(dateTime,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
如何处理字符串中的UTC
部分?
“2021-09-17 11:48:06 UTC”不是本地日期时间:它是日期时间,因为它有时区。而且因为你的时间有时区,所以它与你的模式不匹配,而你的模式不匹配。
如果您的时间字符串总是以“UTC”结尾,您可以在模式中将其设为文字:
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss 'UTC'");
如果需要处理UTC以外的其他时区,可以使用z
:
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
但请注意,这是用于解析分区日期时间;从中,您可以提取本地日期时间:
ZonedDateTime zdt = ZonedDateTime.parse(dateTime,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
LocalDateTime ldt =z dt.toLocalDateTime();
切勿对标准时区文本进行硬编码,例如 UTC
、GMT
等
切勿对 UTC
、GMT
等标准时区文本进行硬编码。DateTimeFormatter
已经能够以最佳方式进行处理。
使用模式 uuuu-MM-dd HH:mm:ss VV
将给定的日期时间字符串解析为 TemporalAccessor
,您可以从中获取 Instant
以及 LocalDateTime
。
演示:
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "2021-09-17 11:48:06 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss VV", Locale.ENGLISH);
TemporalAccessor temporalAccessor = dtf.parse(strDateTime);
Instant instant = Instant.from(temporalAccessor);
LocalDateTime ldt = LocalDateTime.from(temporalAccessor);
System.out.println(instant);
System.out.println(ldt);
}
}
输出:
2021-09-17T11:48:06Z
2021-09-17T11:48:06
或者:
使用模式 uuuu-MM-dd HH:mm:ss VV
将给定的日期时间字符串解析为 ZonedDateTime
,您可以从中获取 Instant
以及 LocalDateTime
。
演示:
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "2021-09-17 11:48:06 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss VV", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, dtf);
Instant instant = Instant.from(zdt);
LocalDateTime ldt = zdt.toLocalDateTime();
System.out.println(zdt);
System.out.println(instant);
System.out.println(ldt);
}
}
输出:
2021-09-17T11:48:06Z[UTC]
2021-09-17T11:48:06Z
2021-09-17T11:48:06
详细了解 modern Date-Time API* from Trail: Date Time。
* 无论出于何种原因,如果您必须坚持Java 6 或Java 7,您可以使用ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and 。
"2021-09-17 11:48:06 UTC"
我想解析以下字符串并创建一个 LocalDateTime
对象或一个 Instant
我知道你可以这样写
String dateTime = "2021-09-17 11:48:06 UTC";
LocalDateTime dt = LocalDateTime.parse(dateTime,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
如何处理字符串中的UTC
部分?
“2021-09-17 11:48:06 UTC”不是本地日期时间:它是日期时间,因为它有时区。而且因为你的时间有时区,所以它与你的模式不匹配,而你的模式不匹配。
如果您的时间字符串总是以“UTC”结尾,您可以在模式中将其设为文字:
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss 'UTC'");
如果需要处理UTC以外的其他时区,可以使用z
:
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
但请注意,这是用于解析分区日期时间;从中,您可以提取本地日期时间:
ZonedDateTime zdt = ZonedDateTime.parse(dateTime,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
LocalDateTime ldt =z dt.toLocalDateTime();
切勿对标准时区文本进行硬编码,例如 UTC
、GMT
等
切勿对 UTC
、GMT
等标准时区文本进行硬编码。DateTimeFormatter
已经能够以最佳方式进行处理。
使用模式 uuuu-MM-dd HH:mm:ss VV
将给定的日期时间字符串解析为 TemporalAccessor
,您可以从中获取 Instant
以及 LocalDateTime
。
演示:
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "2021-09-17 11:48:06 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss VV", Locale.ENGLISH);
TemporalAccessor temporalAccessor = dtf.parse(strDateTime);
Instant instant = Instant.from(temporalAccessor);
LocalDateTime ldt = LocalDateTime.from(temporalAccessor);
System.out.println(instant);
System.out.println(ldt);
}
}
输出:
2021-09-17T11:48:06Z
2021-09-17T11:48:06
或者:
使用模式 uuuu-MM-dd HH:mm:ss VV
将给定的日期时间字符串解析为 ZonedDateTime
,您可以从中获取 Instant
以及 LocalDateTime
。
演示:
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "2021-09-17 11:48:06 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss VV", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, dtf);
Instant instant = Instant.from(zdt);
LocalDateTime ldt = zdt.toLocalDateTime();
System.out.println(zdt);
System.out.println(instant);
System.out.println(ldt);
}
}
输出:
2021-09-17T11:48:06Z[UTC]
2021-09-17T11:48:06Z
2021-09-17T11:48:06
详细了解 modern Date-Time API* from Trail: Date Time。
* 无论出于何种原因,如果您必须坚持Java 6 或Java 7,您可以使用ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and