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

Java6中对ISO 8601格式的通用支持

贺英悟
2023-03-14

Java7在SimpleDateFormat类中引入了对ISO 8601格式的支持,通过字符x(而不是大小写z)。在Java6中支持这样的格式需要预处理,所以最好的方法就是这个问题。

这个新格式是Z(大写Z)的超集,还有两个其他变体:

    null
    null
public Date parse(String date, ParsePosition pos)
{
    String iso = ... // Replace the X with a Z timezone string, using a regex

    if (iso.length() == date.length())
    {
        return null; // Not an ISO 8601 date
    }

    Date parsed = super.parse(iso, pos);

    if (parsed != null)
    {
        pos.setIndex(pos.getIndex()+1); // Adjust for ':'
    }

    return parsed;
}

请注意,上面的子类SimpleDateFormat对象必须使用相应的z基于模式进行初始化,也就是说,如果子类是ExtendedSimpleDateFormat,并且您希望解析符合模式yyyy-mm-dd't'hh:mm:ssx的日期,那么您应该使用实例化为

new ExtendedSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

在前面提到的问题中,建议使用regex:(?=[0-9]{2}$)来去掉“:”,在类似的问题中,建议使用regex(?<=[+-]\d{2})$在需要时将“分钟”字段追加为00

显然,成功运行这2个替换可以用于实现全部功能。因此,重写的parse()方法中的iso局部变量将设置为

iso = date.replaceFirst(":(?=[0-9]{2}$)","");

iso = iso.replaceFirst("(?<=[+-]\\d{2})$", "00");

使用if签入,以确保pos值稍后也正确设置,并确保length()比较在前面进行。

共有1个答案

赵明亮
2023-03-14

看来你可以用这个:

import java.util.Calendar;
import javax.xml.bind.DatatypeConverter;

public class TestISO8601 {
    public static void main(String[] args) {
        parse("2012-10-01T19:30:00+02:00"); // UTC+2
        parse("2012-10-01T19:30:00Z");      // UTC
        parse("2012-10-01T19:30:00");       // Local
    }
    public static Date parse(final String str) {
        Calendar c = DatatypeConverter.parseDateTime(str);
        System.out.println(str + "\t" + (c.getTime().getTime()/1000));
        return c.getTime();
    }
}
 类似资料:
  • 问题内容: Java 7 通过字符(而不是大写或小写)引入了对ISO 8601格式的支持。在Java 6中支持此类格式需要进行预处理,因此最好的方法就是问题。 此新格式是(大写字母Z)的超集,还有2个其他变体: “分钟”字段是可选的(即有效的是2位数而不是4位数的时区) 冒号(’:’)可用于将两位数字的“小时”字段与两位数字的“分钟”字段分开。 因此,从Java 7文档的 可以看到,以下三种格式现

  • 问题内容: 我正在使用bootstrap-datetimepicker和ISO8601 datetime格式,如其选项部分所述 在我的控制器中 它以(console.log)将数据发送到后端 并保存为数据库 在我的模板中 我在HTML上看到的输出为 但是根据Angular doc,它应该用于格式 我想念的是什么? 问题答案: 现在,我已经创建了一个过滤器 作为依赖项添加为 并用作 并将日期显示为

  • 本文向大家介绍PowerShell中iso8601格式日期和DateTime对象互转实例,包括了PowerShell中iso8601格式日期和DateTime对象互转实例的使用技巧和注意事项,需要的朋友参考一下 一、iso8601格式转换成DateTime对象 这里主要用到datetime的静态方法static datetime ParseExact(string s, string format

  • 有没有办法将ISO8601日期与Java进行比较?比如,知道字符串日期是否是良好的格式,知道月份是否为负数,以及 我还在搜索如何知道互联网上是否有课程可以比较两个ISO8601日期?比如,如果我有:2000-12-12和1999-05-06。我如何比较这两个日期,使之在年、月和日之间有准确的差异?

  • 本文向大家介绍Python中的通用输出格式,包括了Python中的通用输出格式的使用技巧和注意事项,需要的朋友参考一下 在python中打印处理某些数据的结果时,我们可能需要以吸引人的格式或一定的数学精度输出它们。在本文中,我们将看到用于输出结果的不同选项。 使用格式 在这种方法中,我们使用称为format的内置函数。我们将{}用作将由格式提供的值的占位符。默认情况下,位置将使用格式函数中相同的值

  • 问题内容: 如何转换此 格式 ( ISO8601格式 ): 2014-03-13T09:05:50.240Z 为此( MySQL DATE格式 ): 2014-03-13 在PHP中? 问题答案: 尝试这个 完整的日期功能文档可以在这里找到:http : //php.net/manual/en/function.date.php PHP函数“ strtotime”不执行任何其他操作,然后将您的时间