如何从Java中的String中获取日期和时间?

问题描述:

我得到了像“Wed,08 Feb 2012 09:06:41 +0000”的字符串。 我想取“日期”2012年2月8日和“时间”09:06。如何从Java中的String中获取日期和时间?

我怎样才能得到它?请帮帮我。

在此先感谢.. :)

+0

希望这会有所帮助。 http://*.com/questions/8699587/android-java-time-format – Vaandu 2012-02-08 11:58:31

+1

很多明确的正确答案。请接受一个,不要离开我们:) – Mersenne 2012-02-08 12:44:27

试试这个,

SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss"); 
try 
{ 
    Date date = (Date)sdf.parse("Wed, 08 Feb 2012 09:06:41 +0000"); 
    System.out.println(date); 
    SimpleDateFormat day = new SimpleDateFormat("dd-MMM-yyyy"); 
    SimpleDateFormat time = new SimpleDateFormat("HH:mm"); 
    System.out.println(day.format(date)); 
    System.out.println(time.format(date)); 
} 
catch (ParseException e) 
{ 
    e.printStackTrace(); 
} 

它会肯定工作。

+0

非常感谢你Pratik。 – Hardik 2012-02-08 12:30:52

DateFormat formatter ; 
Date date ; 
formatter = new SimpleDateFormat("EEE, dd MMM yyy HH:mm:ss Z"); 
date = (Date)formatter.parse(str_date); 

看看这里http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html日期和时间模式。

Date d = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").parse(yourString); 

您可以使用SimpleDateFormat。 SimpleDateFormat是一个以区域敏感的方式格式化和解析日期的具体类。它允许格式化(日期 - >文本),解析(文本 - >日期)和规范化。

你只需要一个正确的格式:

"EEE, d MMM yyyy HH:mm:ss Z" 
+0

如果我删除Z.比它会工作...... BTW非常感谢。 – Hardik 2012-02-08 12:31:38

+1

@Hardik:如果你省略Z,那么解析器将忽略字符串中的时区,并且不会产生确切的时间。您会看到“正确的”结果,但结果日期对象与生成字符串的日期对象不同。我认为你需要深入了解Java如何存储时间。这是关于这个的很好的[文章](http://www.odi.ch/prog/design/datetime.php)。 – Mersenne 2012-02-08 12:51:06

+0

烨巴迪,我明白........非常感谢老兄。 – Hardik 2012-02-08 13:00:35

使用下面的语句:

DateFormat fmt = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z"); 
Date date = (Date)fmt.parse("Wed, 08 Feb 2012 09:06:41 +0000"); 

“E,DD MMM YYYY HH:MM:SS Z” 这是你的解析器的模式。

“Wed,08 Feb 2012 09:06:41 +0000”实际上是您的日期字符串。

现在,日期对象包含结构化日期,您可以提取所需的所有内容。

您可以使用SimpleDateFormat

要显示08 - 2月 - 2012可以作为SimpleDateFormat的

SimpleDateFormat m_sdFormatter = new SimpleDateFormat("dd-MMM-yyyy"); 
m_sdFormatter.format(your date); 

要显示 “时间” 09:06。你可以SimpleDateFormat的作为

SimpleDateFormat m_sdFormatter = new SimpleDateFormat("HH:mm"); 
m_sdFormatter.format(your date); 

首先解析字符串转换为Date,然后格式化日期到你需要的字符串:

SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z"); 
    try { 
     Date date = (Date)sdf.parse("Wed, 08 Feb 2012 09:06:41 +0000"); 
     System.out.println(date); 
     SimpleDateFormat day = new SimpleDateFormat("dd-MMM-yyyy"); 
     SimpleDateFormat time = new SimpleDateFormat("HH:mm"); 
     System.out.println(day.format(date)); 
     System.out.println(time.format(date)); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

输出:

Wed Feb 08 09:06:41 GMT 2012 
8-Feb-2012 
09:06 
+0

我得到了约会。但是,它给了时间14:36 .. ?? – Hardik 2012-02-08 12:17:32

+2

@Hardik:没错。源字符串表示“+0000”时区。解析日期将显示在您的本地时区(如'.toString()'调用)。但事实上,这是同一时间。 – Mersenne 2012-02-08 12:34:10

+0

嗯.......非常感谢Dave&Mersenne。 – Hardik 2012-02-08 12:40:01