2011-09-28 68 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

相关问题