此Java日期时间格式是什么?
Mon Nov 26 13:57:03 SGT 2012
我想将此字符串转换为Date并将其转换为另一种格式,例如" yyyy-MM-dd HH:mm:ss"。
从日期转换为字符串并不难。
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
但是我找不到将" Mon Nov 26 13:57:03 SGT 2012"转换为日期格式的有效格式...
=====
找到解决方案:
DateFormat oldDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Format newDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date oldDate = oldDateFormat.parse(oldTimeString);
String newDateString = newDateFormat.format(oldDate);
现在,乔恩·斯凯特(jon skeet)会来告诉您使用Joda时间。 =)
@ivanovic:是的,但是我不确定在解析时,Joda Time是否可以应付时区缩写...
@JonSkeet我还没有使用Joda时间。 但是,感谢您使我的甲骨文(我之前的评论)为true =)
@Iannyboy,如果有帮助,您能接受答案吗?
看到这里:stackoverflow.com/a/11097520/2895571这应该可以解决您的问题。
这将起作用,EEE MMM dd HH:mm:ss z yyyy
您可以在SimpleDateFormat的javadoc中找到示例。参见http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
尝试使用SimpleDateFormat.parse()函数将字符串转换为Date。
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date parseDate = sdf.parse(strInput);
当心解析异常
好吧,这段代码会产生一些输出
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) throws ParseException {
DateFormat inputFormat = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy",
Locale.US);
DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
Locale.US);
String text ="Mon Nov 26 13:57:03 SGT 2012";
Date date = inputFormat.parse(text);
System.out.println(outputFormat.format(date));
}
}
...但是它使用默认的系统时区进行输出。尚不清楚要在哪个时区中显示结果。Date中没有任何内容可存储时区,这使得很难保留文本中给出的原始时区,因此您需要自己确定哪个时区使用。
注意,我在输入和输出中都指定了Locale.US。在指定自定义格式时,这通常是合适的,特别是对于依赖于月份和日期名称的输入。
正如评论中指出的那样,如果您可以进行日期/时间工作,我个人建议使用Joda Time ...比Date / Calendar更好的API。不幸的是,Joda Time无法解析时区-从DateTimeFormat的文档中:
Zone names: Time zone names ('z') cannot be parsed.
还值得注意的是,如果有任何方法可以影响输入数据,那么最好不要使用时区缩写。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CPDateTime
{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
//subtracting a day
//cal.add(Calendar.DATE, -1);
cal.add(Calendar.MONTH, -1);
SimpleDateFormat prev_day = new SimpleDateFormat("dd");
SimpleDateFormat prev_month = new SimpleDateFormat("MM");
SimpleDateFormat prev_year = new SimpleDateFormat("YYYY");
String prev_day_str = prev_day.format(new Date(cal.getTimeInMillis()));
System.out.println(prev_day_str);
String prev_month_str = prev_month.format(new Date(cal.getTimeInMillis()));
System.out.println(prev_month_str);
String prev_year_str = prev_year.format(new Date(cal.getTimeInMillis()));
System.out.println(prev_year_str);
}
}