什么简单的方法来取消日期格式?

时间:2010-09-24 10:41:23

标签: java date formatting

我有这种String格式的一堆日期:

String date = "Wed Sep 15 16:31:05 BST 2010";

我想将其转换回日期或日历对象。在我重新发明轮子之前,有没有简单的方法来实现这一点,最好是在JDK中出现?

3 个答案:

答案 0 :(得分:7)

使用SimpleDateFormat

String format = "EE MMM dd HH:mm:ss zz yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
Date result = sdf.parse(date);

或者,正如Jon Skeet建议的那样,你可以使用JodaTime的DateTimeFormat - 模式应该是相同的。但似乎JodaTime不能正确支持BDT / BST / BDST时区别名。

答案 1 :(得分:3)

嗯,这就是java.text.DateFormat的含义(特别是它的SimpleDateFormat子类) - 但我个人建议您改用Joda Time

特别是Joda Time的DateTimeFormatter类是线程安全的,与SimpleDateFormat不同 - 因此您可以使用适当的模式创建单个实例,并从任何线程使用它。此外,DateTimeFormat类充当ISODateFormat中具有大量预设模式的工厂。哦,并且控制时区等与Joda Time相比更好。

最后,Joda Time只是一个更好的日期和时间API。它并不完美,但它比中的内置DateCalendar支持更好

编辑:尝试解析你的样本字符串,我遇到了“BST”位问题...部分是因为那不是一个完整的时区(它只是欧洲/伦敦时区的DST部分)和部分是因为我无法让Joda Time完成我想做的事......看起来在这种情况下,SimpleDateFormat胜出:(

答案 2 :(得分:1)

SimpleDateFormat

  public static void main(String[] args) {
 try {    String str_date="11-June-07";
         DateFormat formatter ; 
     Date date ; 
          formatter = new SimpleDateFormat("dd-MMM-yy");
              date = (Date)formatter.parse(str_date);    
               System.out.println("Today is " +date );
    } catch (ParseException e)
    {System.out.println("Exception :"+e);    }    

   }  

JodaTime

import org.joda.time.format.*;
import org.joda.time.*;

...    

String dateString = "2009-04-17 10:41:33";

// parse the string
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = formatter.parseDateTime(dateString);

// add two hours
dateTime = dateTime.plusHours(2); // easier than mucking about with Calendar and constants

System.out.println(dateTime);