2013-04-10 151 views
0

我正在将某些数据导入某个系统,并要求为日期提供java日期格式字符串在我的CSV文件中。我不是一个Java程序员,而且我测试它有困难。它要求使用对SimpleDateFormat有效的语法。日期的Java日期格式字符串“2013年1月2日星期三下午5:29:26 +02:00”

我有日期,像这样的Wednesday, January 2, 2013 5:29:26 PM +02:00,这是我想出了基于文档格式字符串,但是,它失败:

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

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

+0

的问题是'+02:00',Java的期待'+ 0200'。如果你可以纠正这个问题,它会解析正确 – MadProgrammer 2013-04-10 00:30:39

+0

你也可以看看[这个](http://stackoverflow.com/questions/2375222/java-simpledateformat-for-time-zone-with-a-colon-分隔符)讨论你的问题,甚至[this](http://stackoverflow.com/questions/2201925/converting-iso8601-compliant-string-to-java-util-date) – MadProgrammer 2013-04-10 00:34:30

+0

是的,我可以在TextMate中替换它们,时区在所有记录中应该是相同的,因为所有数据都是从同一个地方写入的。谢谢,我会试试这个。 – 2013-04-10 00:47:11

回答

2

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

0

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

+0

请阅读我的问题。我不是Java程序员,学习如何编写和执行'Hello SimpleDateFormat'程序是毫无价值的,对于Java程序员来说,这应该是非常容易的问题。 – 2013-04-10 00:16:08

+0

对大多数人来说,处理时间看起来是一件容易的事情,但通常情况并非如此,即许多开发人员不了解时区偏移和世界时间。 – Cebence 2013-04-16 21:46:03

0

要调试日期分析错误,请输出日期格式。

如:

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

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

希望有帮助

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; 
    } 
} 
相关问题