使用 Offset 将字符串日期转换为 DateTimePST(String) 和 DateTimeLocal(String)?
Converting String Date to DateTimePST(String) and DateTimeLocal(String) using Offset?
我有三个参数,UTCTime 和两个偏移量,所有三个都是字符串,我需要按如下方式转换它们
Input:
String UTCTime = "2020-09-29 16:06:00";
String PSTOffset = "-07:00";
String LocalOffset = "-04:00";
Output Expected:
LocalTime = "2020-09-29 12:06:00"
PSTTime = "2020-09-29 09:06:00"
我试过这样做
OffsetDateTime OffsetLocalTime = OffsetDateTime.parse(String.format("%sT%sZ",UTCTime.split(" ")[0],UTCTime.split(" ")[1]));
OffsetLocalTime = OffsetLocalTime.withOffsetSameInstant(ZoneOffset.of(LocalOffset));
OffsetDateTime OffsetPSTTime = OffsetDateTime.parse(String.format("%sT%sZ",UTCTime.split(" ")[0],UTCTime.split(" ")[1]));
OffsetPSTTime = OffsetPSTTime.withOffsetSameInstant(ZoneOffset.of(PSTOffset));
String LocalTime = String.format("%s %s",OffsetLocalTime.toString().substring(0,OffsetLocalTime.toString().lastIndexOf('-')).split("T")[0],OffsetLocalTime.toString().substring(0,OffsetLocalTime.toString().lastIndexOf('-')).split("T")[1]);
String PSTTime = String.format("%s %s",OffsetPSTTime.toString().substring(0,OffsetPSTTime.toString().lastIndexOf('-')).split("T")[0],OffsetPSTTime.toString().substring(0,OffsetPSTTime.toString().lastIndexOf('-')).split("T")[1]);
System.out.println("OffsetLocalTime: "+OffsetLocalTime);
System.out.println("OffsetPSTTime: "+ OffsetPSTTime);
System.out.println("LocalTime: "+ LocalTime);
System.out.println("PSTTime: "+ PSTTime);
Actual Output:
OffsetLocalTime: 2020-09-29T12:06-04:00
OffsetPSTTime: 2020-09-29T09:06-07:00
LocalTime: 2020-09-29 12:06
PSTTime: 2020-09-29 09:06
我错过了几秒钟,这似乎是一种低效的方式,因为我不需要 'T' 或输出中的偏移量,我正在摆脱它们。我不确定是否已经有人问过这个问题。感谢任何帮助。
由于给定的date-time字符串,2020-09-29 16:06:00
没有zone-offset信息,需要先解析成LocalDateTime
,再解析成LocalDateTime
可以转换成OffsetDateTime
.
按如下操作:
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Define the formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
// Given date-time
String localTimeUTC = "2020-09-29 16:06:00";
// Get OffsetDateTime from the given date-time string
OffsetDateTime odtUTC = LocalDateTime.parse(localTimeUTC, formatter).atOffset(ZoneOffset.UTC);
// OffsetDateTime with an Zone-Offset of -7 hours
OffsetDateTime odtAtOffsetMinus7Hours = odtUTC.withOffsetSameInstant(ZoneOffset.ofHours(-7));
System.out.println(odtAtOffsetMinus7Hours.format(formatter));
// OffsetDateTime with an Zone-Offset of -4 hours
OffsetDateTime odtAtOffsetMinus4Hours = odtUTC.withOffsetSameInstant(ZoneOffset.ofHours(-4));
System.out.println(odtAtOffsetMinus4Hours.format(formatter));
}
}
输出:
2020-09-29 09:06:00
2020-09-29 12:06:00
注意: 除了使用 ZoneOffset.ofHours(-7)
,您还可以使用 ZoneOffset.of("-07:00")
,具体取决于您要工作的内容 (number/string)与.
我有三个参数,UTCTime 和两个偏移量,所有三个都是字符串,我需要按如下方式转换它们
Input:
String UTCTime = "2020-09-29 16:06:00";
String PSTOffset = "-07:00";
String LocalOffset = "-04:00";
Output Expected:
LocalTime = "2020-09-29 12:06:00"
PSTTime = "2020-09-29 09:06:00"
我试过这样做
OffsetDateTime OffsetLocalTime = OffsetDateTime.parse(String.format("%sT%sZ",UTCTime.split(" ")[0],UTCTime.split(" ")[1]));
OffsetLocalTime = OffsetLocalTime.withOffsetSameInstant(ZoneOffset.of(LocalOffset));
OffsetDateTime OffsetPSTTime = OffsetDateTime.parse(String.format("%sT%sZ",UTCTime.split(" ")[0],UTCTime.split(" ")[1]));
OffsetPSTTime = OffsetPSTTime.withOffsetSameInstant(ZoneOffset.of(PSTOffset));
String LocalTime = String.format("%s %s",OffsetLocalTime.toString().substring(0,OffsetLocalTime.toString().lastIndexOf('-')).split("T")[0],OffsetLocalTime.toString().substring(0,OffsetLocalTime.toString().lastIndexOf('-')).split("T")[1]);
String PSTTime = String.format("%s %s",OffsetPSTTime.toString().substring(0,OffsetPSTTime.toString().lastIndexOf('-')).split("T")[0],OffsetPSTTime.toString().substring(0,OffsetPSTTime.toString().lastIndexOf('-')).split("T")[1]);
System.out.println("OffsetLocalTime: "+OffsetLocalTime);
System.out.println("OffsetPSTTime: "+ OffsetPSTTime);
System.out.println("LocalTime: "+ LocalTime);
System.out.println("PSTTime: "+ PSTTime);
Actual Output:
OffsetLocalTime: 2020-09-29T12:06-04:00
OffsetPSTTime: 2020-09-29T09:06-07:00
LocalTime: 2020-09-29 12:06
PSTTime: 2020-09-29 09:06
我错过了几秒钟,这似乎是一种低效的方式,因为我不需要 'T' 或输出中的偏移量,我正在摆脱它们。我不确定是否已经有人问过这个问题。感谢任何帮助。
由于给定的date-time字符串,2020-09-29 16:06:00
没有zone-offset信息,需要先解析成LocalDateTime
,再解析成LocalDateTime
可以转换成OffsetDateTime
.
按如下操作:
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Define the formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
// Given date-time
String localTimeUTC = "2020-09-29 16:06:00";
// Get OffsetDateTime from the given date-time string
OffsetDateTime odtUTC = LocalDateTime.parse(localTimeUTC, formatter).atOffset(ZoneOffset.UTC);
// OffsetDateTime with an Zone-Offset of -7 hours
OffsetDateTime odtAtOffsetMinus7Hours = odtUTC.withOffsetSameInstant(ZoneOffset.ofHours(-7));
System.out.println(odtAtOffsetMinus7Hours.format(formatter));
// OffsetDateTime with an Zone-Offset of -4 hours
OffsetDateTime odtAtOffsetMinus4Hours = odtUTC.withOffsetSameInstant(ZoneOffset.ofHours(-4));
System.out.println(odtAtOffsetMinus4Hours.format(formatter));
}
}
输出:
2020-09-29 09:06:00
2020-09-29 12:06:00
注意: 除了使用 ZoneOffset.ofHours(-7)
,您还可以使用 ZoneOffset.of("-07:00")
,具体取决于您要工作的内容 (number/string)与.