Member 12743673 Ответов: 1

Преобразование строки date в datetimepst(строка) и datetimelocal(строка) с использованием смещения?


У меня есть три параметра, 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

Я упускаю секунды, и это кажется неэффективным способом, потому что мне не нужно " т " или смещение в моем выходе, и я избавляюсь от них. Я не уверен, что этот вопрос уже задан. Любая помощь будет оценена по достоинству.

1 Ответов

Рейтинг:
2

Sandeep Mewara

Ваша входная строка не имеет каких-либо зоны, определенной для него. Для того чтобы преобразовать его во что-либо, сначала нужно нормализовать (основать) его в какой-то формат (предпочтительный UTC), а затем использовать встроенные преобразования в соответствии с потребностями.

// Input string
String inputTime = "2020-09-29 16:06:00";

// Define the input string format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
 
// Convert it to UTC
OffsetDateTime inputTimeUTC = LocalDateTime.parse(inputTime, formatter).atOffset(ZoneOffset.UTC);
Как только у вас есть это сейчас, вы можете добавить ffsets в соответствии с потребностями, например:
// Example for -7 hours
OffsetDateTime outputTime = inputTimeUTC.withOffsetSameInstant(ZoneOffset.ofHours(-7));

Попробуй!