当前位置: 首页 > 知识库问答 >
问题:

Java时间解析“2021年6月26日,04:30:15 pm NY”

柳珂
2023-03-14
String str = "Jun 26th 2021, 04:30:15 pm NY";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("MMM dd'th' uuuu, h:mm:ss a z")
        .toFormatter(Locale.US);
ZonedDateTime result = ZonedDateTime.parse(str, formatter);
java.time.format.DateTimeParseException: Text 'Jun 26th 2021, 04:30:15 pm NY' could not be parsed at index 27

似乎ny不包括在z中,请注意这个错误,还有什么技巧可以避免在解析器中使用'th'吗?

共有1个答案

戴瑞
2023-03-14

DateTimeFormatter#parse(CharSequence,ParsePosition)由您自行决定。

注意ny不是时区的名称。时区的命名约定是区域/城市,例如Europe/Paris。您可以使用zoneid#getAvailableZoneids获取时区名称列表。

此外,对于具有序数的月份,例如26号,您可以构建映射,如下代码所示。

import java.text.ParsePosition;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        String strDateTime ="Jun 26th 2021, 04:30:15 pm NY";
    
        DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("[MMMM][MMM] ") // caters for both full name and 3-letter abbv.
                .appendText(ChronoField.DAY_OF_MONTH, ordinalMap())
                .appendPattern(" u, h:m:s a")
                .toFormatter(Locale.ENGLISH);

        LocalDateTime ldt = LocalDateTime.from(dtf.parse(strDateTime, new ParsePosition(0)));
        ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/New_York"));
        System.out.println(zdt);
    }
    static Map<Long, String> ordinalMap() {
        String[] suffix = { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" };
        Map<Long, String> map = new HashMap<>();
        
        for (int i = 1; i <= 31; i++) 
            map.put((long)i, String.valueOf(i) + suffix[(i > 3 && i < 21) ? 0 : (i % 10)]);
        
        return map;
    }
}
2021-06-26T16:30:15-04:00[America/New_York]
 类似资料:
  • 在线客服 【新增】H5半屏组件 1、客户可以通过接口传参的方式来设定H5聊天组件的弹窗高度,新增参数expand_size, half为半屏,full为全屏,默认为全屏。 2、half有两种弹出状态,通过点击相应区域可以相互切换,分别是左图和右图 3、在指定half的时候,建议同时开启auto_ expand传true,落地时将会为左图的微弹状态,增强用户的使用体验。 4、可以通过h5渠道设置控制

  • 在线客服 【新增】人工满意度评价增加10分模式(支持PC、H5客户端) 人工满意度评价增加10分模式,客户可以选择使用5星模式或者10分模式,10分模式支持计算NPS值。本次支持PC、H5客户端使用。 工作台支持评价模式筛选查看 人工满意度评价统计增加10分模式指标,好评(9-10分)、中评(7-8分)、差评(0-6分)。支持NPS值计算:(好评/10分评价总数)×100%-(差评/10分评价总数

  • 工单 【新增】工单列表和工单列表导出新增系统首次解决时间内容,同时将原首次解决时间变更为客服首次解决时间。 触发器首次解决时间是指,工单被定时触发器或流转触发器首次变更为已解决状态的时间。对工单列表新增触发器首次解决时间的内容,可通过列表自定义字段进行该字段是否显示的控制,导出时默认导出该字段内容,如工单没有被触发器变更为已完成状态,则该字段内容为空。 在线 【新增】会话链接安全设置 开启后,复制

  • 工单 【新增】批量编辑工单新增修改工单分类功能 客服通过工单列表多选工单进行批量编辑时,可通过“工单分类”对选中的工单进行修改,修改分类时,若修改后的工单分类模板,含原工单中不存在或未填写的必填字段内容,则该字段为空并可以保存成功。 【新增】自定义字段权限,增加问题描述的权限设置 对工单自定义字段-自定义字段权限设置,新增问题描述的权限设置,可对指定的权限组,将问题描述设置为只读或读写权限,权限组

  • 在线机器人 【新增】客户回复内容新增接口校验 在多轮会话中,对客户回复内容增加了接口校验的方式,用户可以通过选择接口的入参作为校验的标准。客户输入的内容符合入参数据视为正确回复,对不符合入参数据的回复发送错误提示。 机器人提问前置条件/答案输出条件:原「属性类别]条件变更为「客户输入检查」,客户输入检查内容类型包含属性名词,固定参数,接口校验。 【新增】内部知识库导出增加纯文本答案 增加了纯文本列

  • 在线机器人 【新增】客户回复内容新增接口校验 在多轮会话中,对客户回复内容增加了接口校验的方式,用户可以通过选择接口的入参作为校验的标准。客户输入的内容符合入参数据视为正确回复,对不符合入参数据的回复发送错误提示。 机器人提问前置条件/答案输出条件:原「属性类别]条件变更为「客户输入检查」,客户输入检查内容类型包含属性名词,固定参数,接口校验。 【新增】内部知识库导出增加纯文本答案 增加了纯文本列