Date converter in JAVA
本问题已经有最佳答案,请猛点这里访问。
我有像
1 2 3 4 | final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date date = bdate; Date ndate = formatter.parse(formatter.format(date)); System.out.println(ndate); |
给出相同的日期。
使用具有适当格式的两个SimpleDateFormat对象,并使用第一个将字符串解析为日期,使用第二个将日期再次格式化为字符串。
其他人遗漏的一个主要问题是处理时区(TZ)。任何时候你使用SimpleDateFormat来转换日期的字符串表示,你真的需要知道你正在处理的TZ。除非您在SimpleDateFormat上明确设置TZ,否则在格式化/解析时它将使用默认的TZ。除非您只处理默认时区中的日期字符串,否则您将遇到问题。
您的输入日期代表GMT中的日期。假设您还希望将输出格式化为GMT,则需要确保在SimpleDateFormat上设置TZ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static void main(String[] args) throws Exception { String inputDate ="Tue Mar 19 00:41:00 GMT 2013"; // Initialize with format of input SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); // Configure the TZ on the date formatter. Not sure why it doesn't get set // automatically when parsing the date since the input includes the TZ name, // but it doesn't. One of many reasons to use Joda instead sdf.setTimeZone(TimeZone.getTimeZone("GMT")); Date date = sdf.parse(inputDate); // re-initialize the pattern with format of desired output. Alternatively, // you could use a new SimpleDateFormat instance as long as you set the TZ // correctly sdf.applyPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(date)); } |
正如第一个答案所说。首先用SimpleDateFormat解析你的日期,如下所示:
1 |
然后使用它来使用另一个SimpleDateFormat实例格式化生成的日期对象,如下所示:
1 |
在这里查看SimpleDateFormat的javadoc。希望有所帮助。
以这种方式使用SimpleDateFormat:
1 2 3 | final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date date = new Date(); System.out.println(formatter.format(date)); |
如果您进行任何计算或解析日期,请使用JodaTime,因为标准的JAVA日期支持确实是错误的