我有这种String格式的一堆日期:
String date = "Wed Sep 15 16:31:05 BST 2010";
我想将其转换回日期或日历对象。在我重新发明轮子之前,有没有简单的方法来实现这一点,最好是在JDK中出现?
答案 0 :(得分:7)
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。它并不完美,但它比Date
和Calendar
支持更好 。
SimpleDateFormat
胜出:(
答案 2 :(得分:1)
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); }
}
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);