我正在将某些数据导入某个系统,并要求我为CSV文档中的日期提供java日期格式字符串。我不是Java程序员,我很难测试它。它要求使用对SimpleDateFormat有效的语法。
我有这样的日期Wednesday, January 2, 2013 5:29:26 PM +02:00
,这是我根据文档提供的格式字符串,但是,它失败了:
EEEE, MMM d, y hh:mm:ss a Z
我认为时区格式字符串是错误的,但我不知道正确的解决方案。请帮忙。
答案 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;
}
}