Java日期格式字符串,日期为“2013年1月2日星期三下午5:29:26 +02:00”

时间:2013-04-10 00:11:20

标签: java simpledateformat

我正在将某些数据导入某个系统,并要求我为CSV文档中的日期提供java日期格式字符串。我不是Java程序员,我很难测试它。它要求使用对SimpleDateFormat有效的语法。

我有这样的日期Wednesday, January 2, 2013 5:29:26 PM +02:00,这是我根据文档提供的格式字符串,但是,它失败了:

EEEE, MMM d, y hh:mm:ss a Z

我认为时区格式字符串是错误的,但我不知道正确的解决方案。请帮忙。

4 个答案:

答案 0 :(得分:2)

问题是+02:00,Java期待+0200。如果你能纠正这个问题,它会正确解析

答案 1 :(得分:0)

考虑使用Joda Time库,它内置了对解析和输出ISO格式日期字符串的支持。

答案 2 :(得分:0)

要调试日期解析错误,请打印出日期格式。

例如:

System.out.println(new SimpleDateFormat("EEEE, MMM d, y hh:mm:ss a Z").format(new Date()));

然后调整,直到看到正确的格式。

希望有所帮助

答案 3 :(得分:0)

希望你的问题得到答案:

C:\Users\Cebence\jdev\StackOverflow> java StackOverflow15914753
input = Wednesday, January 2, 2013 5:29:26 PM +02:00

Parsing input into date ............   [ OK ]

    date @ local = Wed Jan 02 16:29:26 CET 2013
ISO date @ local = 2013-01-02T16:29:26.000+01:00
        UTC date = 2013-01-02T15:29:26.000Z

此输出由以下演示应用程序创建。 请注意正确的时区,区域设置和“X”而不是“Z”对于解析的重要性。 “X”处理“+02:00”,仅适用于Java 7。

    // Important to be US!
    SimpleDateFormat format = new SimpleDateFormat(CUSTOM_FORMAT_WITH_TZ, Locale.US);
    // Important to be +2 hours offset!

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;


/**
 * http://stackoverflow.com/questions/15914753/java-date-format-string-for-date-wednesday-january-2-2013-52926-pm-0200
 * input: "Wednesday, January 2, 2013 5:29:26 PM +02:00"
 * asking-for: working timestamp format string "EEEE, MMM d, y hh:mm:ss a Z"
 *
 * @author dejan.cebetarevic
 */
public class StackOverflow15914753 {
  private static final String ISO_FORMAT_WITH_TZ = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
  private static final String ISO_FORMAT_NO_TZ = "yyyy-MM-dd'T'HH:mm:ss.SSS";
  private static final String CUSTOM_FORMAT_WITH_TZ = "EEEE, MMMM d, y hh:mm:ss a XXX";
  private static final String DEFAULT_INPUT = "Wednesday, January 2, 2013 5:29:26 PM +02:00";

  public static void main(String[] args) throws Exception {
    // Assume default input.
    String input = DEFAULT_INPUT;

    // But if an input was given, use it.
    if (args.length == 1) {
      input = args[0];
    }
    System.out.println("input = " + input);

    System.out.print("\nParsing input into date ............");
    Date d = createCustomDateFormat().parse(input);
    System.out.println("   [ OK ]\n");

    System.out.println("    date @ local = " + d);
    System.out.println("ISO date @ local = " + isoFormat(d));
    System.out.println("        UTC date = " + utcFormat(d));
  }

  public static String utcFormat(Date date) throws Exception {
    SimpleDateFormat utc = new SimpleDateFormat(ISO_FORMAT_WITH_TZ, Locale.UK);
    utc.setCalendar(Calendar.getInstance(TimeZone.getTimeZone("UTC")));
    return utc.format(date);
  }

  public static String isoFormat(Date date) throws Exception {
    SimpleDateFormat iso = new SimpleDateFormat(ISO_FORMAT_WITH_TZ);
    return iso.format(date);
  }

  public static SimpleDateFormat createCustomDateFormat() throws Exception {
    // Important to be US!
    SimpleDateFormat format = new SimpleDateFormat(CUSTOM_FORMAT_WITH_TZ, Locale.US);
    // Important to be +2 hours offset!
    format.setCalendar(Calendar.getInstance(TimeZone.getTimeZone("GMT+2")));
    return format;
  }
}
相关问题