2013-04-10 185 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; 
    } 
} 
相關問題