2011-09-28 66 views
27

我想獲取給定日期字符串的格式。如何在java中獲取給定的日期字符串格式(模式)?

例如:我有一個字符串,如2011-09-27T07:04:21.97-05:00,此字符串的日期格式爲yyyy-MM-dd'T'HH:mm:ss.SSS

在這裏,我想找出此日期格式,當我經過串(2011-09-27T07:04:21.97-05:00),其將返回格式(yyyy-MM-dd'T'HH:mm:ss.SSS)的方法,那麼以後我會根據我的要求(like yy-mm--dd or mm/dd/yyyy)格式化我給出的日期字符串。

任何人都可以告訴我如何實現它?

+0

@Tomasz Nurkiewicz所有最重要reg表達式中,以日期和時間格式,不,它不是。這是從一種格式到另一種格式的日期轉換問題。 –

+7

我不明白這個Java問題是如何重複(非常一般)的Javascript問題 –

+0

哈哈..我浪費了我的時間滾動這個問題的JavaScript回答..沒有使用...它不是重複的問題..請不要使用untag口信 –

回答

31
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class NewClass { 

    private static final String[] formats = { 
       "yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ssZ", 
       "yyyy-MM-dd'T'HH:mm:ss",  "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", 
       "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm:ss", 
       "MM/dd/yyyy HH:mm:ss",  "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'", 
       "MM/dd/yyyy'T'HH:mm:ss.SSSZ", "MM/dd/yyyy'T'HH:mm:ss.SSS", 
       "MM/dd/yyyy'T'HH:mm:ssZ",  "MM/dd/yyyy'T'HH:mm:ss", 
       "yyyy:MM:dd HH:mm:ss",  "yyyyMMdd", }; 

     /* 
     * @param args 
     */ 
    public static void main(String[] args) { 
     String yyyyMMdd = "20110917"; 
     parse(yyyyMMdd); 
    } 

    public static void parse(String d) { 
     if (d != null) { 
      for (String parse : formats) { 
       SimpleDateFormat sdf = new SimpleDateFormat(parse); 
       try { 
        sdf.parse(d); 
        System.out.println("Printing the value of " + parse); 
       } catch (ParseException e) { 

       } 
      } 
     } 
    } 
} 
+0

以上解決方案將會對日期進行解析,但不會給出日期格式。 SimpleDateFormat的toPattern和toLocalizedPattern會給出確切的格式。 –

+0

如果有人正在使用此解決方案,只需在打印值後返回解析字符串 – Narasimha

0

您將需要使用inital日期字符串並將其轉換爲日期對象,並傳遞該轉換後的日期對象並將其格式化爲所需的字符串。

3

我想你應該嘗試解析一些預定義模式的輸入字符串。工作的那個是你需要的那個。請記住,有些模式非常棘手。

01.12.12是2012年12月1日在歐洲,但2012年1月12日在美國。它也可能是2001年12月12日。

6

你可以做這樣的方式,我不知道好辦法或沒有,但嘗試這個

首先創建的SimpleDateFormat對象

SimpleDateFormt sdf = new SimpleDateFormat("yyyy-MM-dd 'T' HH:mm:ss.SSS"); 

現在,當檢查日期,如果這將在此解析格式然後更改按照您的格式

try{ 
    Date date = sdf.parse(yourdate); 
    sdf.applyPattern("yy-mm--dd or mm/dd/yyyy"); 
    String dateformat = sdf.format(date); 
}catch(Exception ex) { // here forgot the exact exception class Parse exception was used 
    // do something here 
} 

更新的帖子:

Returning a date format from an unknown format of date string in java

How to convert String to Date without knowing the format?

Parse any date in Java

+0

我怎樣才能指定的格式SimpleDateFormat出去知道給定的字符串格式? – sathish

+0

檢查更新後的帖子 – Pratik

+0

我怎樣才能指定SimpleDateFormat格式爲「yyyy-mm-dd'T'HH:mm:ss.SSS」而不知道給定的字符串格式?如果我的字符串像2011-09-28 12:00:22那麼我應該如何解析這與上面的SimpleDateFormat對象? – sathish

2

如果我理解正確的話,要通過使用DateFormat.parse()解析任意字符串(也就是你不知道格式的字符串)的日期?然後,你必須處理像如何處理01-02-03(2003年1月2日?1 2003二月?等等)

你應該知道,至少東西關於預期的格式,像一個選擇的幾個預定義的格式問題,你輸入。

0
HH:mm:ss.SSS => ([0-2]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(.)([0-9]{1,3}) 

yyyy-mm-dd => ([0-9]{4})(-)([0-1]{1,}[0-9]{1,})(-)([0-3]{1,}[0-9]{1,}) 
+1

您的問題是什麼? – cereallarceny

相關問題