java - 从字符串中提取时区

标签 java timezone simpledateformat

我知道有几个关于此的问题。但是我对特定日期模式有疑问。这是一个例子:

20130401100000[-03:EST]

我在使用 -03 时遇到了问题,因为根据 SimpleDateFormat文档它应该有 4 位数字。我得到的最接近的模式是这样的:

yyyyMMddHHmmss'['Z':'z']'

但由于 2 位数字,它无法正常工作。这是我用于测试的代码示例:

public static void main(String[] args) throws ParseException {
    String input = "20130401100000[-03:EST]";

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
    df.setTimeZone(TimeZone.getTimeZone("GMT"));    

    System.out.println(df.format(new Date()));
    System.out.println(df.parse(input));
}

当我打印 new Date() 时,我得到了这个:

20130528155734[+0000:GMT]

但是当我尝试解析 input 时,出现以下异常:

Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]"
at java.text.DateFormat.parse(DateFormat.java:337)
at Teste.main(Teste.java:17)

有谁知道如何将输入解析为Date使用正确的 TimeZone

最佳答案

您可以通过以下方式更正格式:

public static void main(String[] args) throws ParseException {
    String input = "20130401100000[-03:EST]";

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
    df.setTimeZone(TimeZone.getTimeZone("GMT"));    

    System.out.println(df.format(new Date()));
    input = input.replace(":","00:");
    System.out.println(df.parse(input));
}

如果您将格式正确的日期与格式不正确的日期混合在一起,您可以使用:

    input = input.replaceAll("(\\[[+-]\\d{2}):","$100:");

关于java - 从字符串中提取时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16796545/

相关文章:

java - 无法解析服务器输入流

java - 通过链式操作快速降低流吞吐量?

java - 使用 null 调用函数时自动向上转换

java - 在 Java 7 中处理日期对象和时区

c++ - 打印处理程序时经过的总时间

android - 如何使用 DateFormat 解析日期字符串?

java - 基于索引字段的提升

java android DateFormat 忽略修改后的语言环境设置

java - 如何将天数添加到java简单日期格式

r - 在 R 中从 UTC 转换为日期格式