5

我目前正在使用SimpleDateFormat格式创建日期时间值yyyy-MM-dd HH:mm:ss。这是我的代码:

     Date date = new SimpleDateFormat("yy-M-d H:m:ss").parse(datetime);
     String Dtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

但是,我希望格式改为:

  2013-04-12T13:38:48+02:00

如何添加时区以获得所需的格式?

谢谢!

4

6 回答 6

12

查看SimpleDateFormat的 API 文档。在那里您可以看到,您可以使用字符“z”作为时区信息。

示例:“yyyy.MM.dd G 'at' HH:mm:ss z”将为您提供“2001.07.04 AD at 12:08:56 PDT”

要在日期上设置时区,请查看此问题和答案

于 2013-04-12T11:45:48.297 回答
4

这是 XML/XSD dateTime 数据类型格式。使用 javax.xml.datatype.XMLGregorianCalendar

    XMLGregorianCalendar gc = DatatypeFactory.newInstance().newXMLGregorianCalendar("2013-04-12T13:38:48+02:00");
    System.out.println(gc);

输出

2013-04-12T13:38:48+02:00
于 2013-04-12T11:49:12.643 回答
2

如果您使用“z”或“Z”,那么您仍然无法确定您的时区会是什么样子。这取决于您的本地人和 JVM 版本,将选择哪个 ISO8601 版本。

使时区始终采用“+02:00”格式的一种方法是请求它。使用以下日期格式:

DateTimeFormatter formatter = 
    new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd'T'HH:mm:ss")
        .appendOffset("+HH:MM","+00:00")
        .toFormatter();

并始终与ZonedDateTime类型一起使用。它是线程安全的。

于 2018-02-27T18:44:39.343 回答
1

我一直在寻找完全相同的答案。我必须向后兼容现有的日期格式,就像在示例中一样 - “2013-04-12T13:38:48+02:00”,我的另一个限制是我不能使用任何开源库,除了Java 6 提供了什么。因此,在没有在这里找到解决方案之后,我想出了这个简单的转换技术,这很丑陋,但我发现我把它贴在这里以防有人需要一个快速而肮脏的解决方案。如果有人知道如何做得更好(有我提到的限制),请纠正我。

因此,要以所需格式生成输出:

private DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

public GregorianCalendar stringToCalendar(String v) 
{
    // 22 is an idx of last ':', you can replace with v.lastIndex(':') to be neat  
    String simpleV = v.substring(0, 22).concat(v.substring(23));   

    GregorianCalendar gc = (GregorianCalendar) df.getCalendar();

    gc.setTime(df.parse(simpleV));
    return gc;
}

public String calendarToString(GregorianCalendar v) 
{
    df.setCalendar(v); 

    String out = df.format(v.getTime());

    return out.substring(0, 22).concat(":").concat(out.substring(22)); // read above on '22'
}   

就像我说的,这远非完美,但我没有找到更好的东西..

于 2014-04-23T19:25:43.813 回答
0

有一种简单的方法可以做到这一点。您可以定义格式,如: String Dtime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(date);

这应该这样做。

于 2020-01-06T06:53:31.953 回答
-1

您可以通过包轻松实现java.util.Calendar

试试下面的代码

       import java.util.Calendar; //Import package

        String month_order[]={"Select...","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
        Calendar cal = Calendar.getInstance();
        int month = cal.get(Calendar.MONTH) + 1;
        int dom = cal.get(Calendar.DAY_OF_MONTH);
        int doy=cal.get(Calendar.YEAR);
        System.out.println("Current date: "+month_order[month]);
        System.out.println("Current Month:  "+dom);
        System.out.println("Current year: "+doy);
于 2013-04-12T11:52:34.973 回答