如何使 LocalTime 实例变量根据我的特定格式接受 json 数据?

Posted

技术标签:

【中文标题】如何使 LocalTime 实例变量根据我的特定格式接受 json 数据?【英文标题】:How can i make LocalTime instance variable accept json data based on my specific format? 【发布时间】:2022-01-16 05:25:13 【问题描述】:

我遇到了一个问题,我基本上是从 API 获取数据作为 Json 对象, Json 对象中的字段time 设置为如下格式:HH:mm

我在填写 LocalTime 对象时遇到问题,因为它的默认格式看起来像这样 23:37:48.120473200(LocalTime 是我的 Message 类中的一个实例变量)

我该如何解决这个问题?

消息类


public class Message 
    private LocalDate date;
    private LocalTime time;
    private String message;
    private String messageId;


    public Message(LocalDate date, LocalTime time, String message, String messageId) 
        this.date = date;
        this.time = time;
        this.message = message;
        this.messageId = messageId;
    

    @Override
    public String toString() 
        return "Message" +
                "date='" + date + '\'' +
                ", time='" + time + '\'' +
                ", message='" + message + '\'' +
                ", messageId='" + messageId + '\'' +
                '';
    

    public String getMessageId() 
        return messageId;
    

    public void setMessageId(String messageId) 
        this.messageId = messageId;
    

    public LocalDate getDate() 
        return date;
    

    public void setDate(LocalDate date) 
        this.date = date;
    

    public LocalTime getTime() 
        return time;
    

    public void setTime(LocalTime time) 
        this.time = time;
    

    public String getMessage() 
        return message;
    

    public void setMessage(String message) 
        this.message = message;
    


【问题讨论】:

您确定收到的数据格式是hh:mm吗?这是一个不完整的模式,因为hh 是 12 小时格式的一天中的几个小时,但是如果没有 AM/PM,您将无法判断正确的时间。但是,您可以解析格式为HH:mmStringHH:24 小时格式的小时数),如LocalTime.parse(input, DateTimeFormatter.ofPattern("HH:mm") @deHaar 对不起,我的错误是 HH:mm,我收到的数据格式是 hh:mm,我 100% 确定。当我使用邮递员时,我看到类似 "time":"03:23" 的内容,但时间当然是字符串,所以 idk。 您必须使用DateTimeFormatter 指定输入格式,就是这样。 LocalTime.parse(String, DateTimeFormatter) 方法将用 0 填充剩余的单元。 但是我应该在哪里添加它?我从firebase api实时数据库获取数据,我无法填写它,因为我尝试它的那一刻给了我一个错误,说列表为空,这意味着填充消息对象时出错(可能由不正确的格式引起)。我应该在哪里添加这个LocalTime.parse(String, DateTimeFormatter) 【参考方案1】:

tl;博士

LocalTime.parse( "03:23" )

详情

格式为 24 小时制小时格式的文本,后跟一个冒号和分钟,填充零,符合文本日期时间格式的 ISO 8601 标准。

java.time 类在解析此类文本时默认使用 ISO 8601 格式。所以不需要指定格式模式。

String input = "03:23" ;
LocalTime lt = LocalTime.parse( input ) ;

如果您使用框架来解析 JSON,您应该能够要求框架为您执行此解析。主要的 JSON 框架已更新以利用 java.time 类。

【讨论】:

以上是关于如何使 LocalTime 实例变量根据我的特定格式接受 json 数据?的主要内容,如果未能解决你的问题,请参考以下文章

定格由ngfor生成的dom元素

如何使全局变量在多个 google appengine 实例上保持不变?

C# 如何根据指定变量来实例化对象?

双链接列表上一个实例变量

如何使作业/线程与崩溃隔离

如何根据工作流变量部署到不同的环境?