gpt4 book ai didi

java - ZonedDateTime.parse 不适用于解析 am 或 pm 时间

转载 作者:行者123 更新时间:2023-12-02 19:35:20 26 4
gpt4 key购买 nike

我正在学习java,试图构建一个工具,根据用户输入(时间、时区A和时区B的输入)将特定时间从A时区转换为B时区。这是关于该工具以特定格式收集时间并将其转换为 ZonedDateTime 对象的部分。

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;

public static String fullTime;
public static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm a");
public static ZonedDateTime newTime;

public static void getHourAndMinutes(){
System.out.print("Please type in the time you have in mind in format hh:mm am/pm\n");
Scanner in = new Scanner(System.in);
fullTime = in.nextLine();
System.out.println(fullTime);
newTime = ZonedDateTime.parse(fullTime, formatter);

我尝试以 10:30PM、10:30 PM、10:30pm、10:30 pm、10:30p、10:30 p 等格式输入时间,所有这些条目都会导致异常错误抛出,我遇到这样的错误

Exception in thread "main" java.time.format.DateTimeParseException: Text '10:30 pm' could not be parsed at index 6

知道我可能做错了什么吗?谢谢!

最佳答案

由于用户输入的内容只是代表时间,因此您需要将其解析为 LocalTime ,另一个错误是您使用了错误的模式,H 是一天中的小时 (0-23);您需要 DateTimeFormatter 中的 h

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a");

LocalTime localTime = LocalTime.parse("10:30 PM",formatter);

将输入解析为 LocalTime 后您可以将其转换为 ZonedDateTime 。但您必须指定日期 ( LocalDate ) 以及时间和区域。您在问题中的代码只有一天中的时间,缺少实例化 ZonedDateTime 所需的日期和区域。

ZonedDateTime dateTime = localTime.atDate(LocalDate.now()).atZone(ZoneId.systemDefault());

然后您可以使用 withZoneSameInstant 将其转换为另一个区域

ZonedDateTime result = dateTime.withZoneSameInstant(ZoneId.of("America/New_York));

关于java - ZonedDateTime.parse 不适用于解析 am 或 pm 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61114302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com