使用 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)与.