我有类似以下Mon Jun 18 00:00:00 IST 2012
的值,我想将其转换为18/06/2012
如何转换?
我试过这个方法
public String toDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date theDate = null;
//String in = date + "/" + month + "/" + year;
try {
theDate = dateFormat.parse(date.toString());
System.out.println("Date parsed = " + dateFormat.format(theDate));
} catch (ParseException e) {
e.printStackTrace();
}
return dateFormat.format(theDate);
}
但它会引发异常:
java.text.ParseException: Unparseable date: "Mon Jun 18 00:00:00 IST 2012"
答案 0 :(得分:62)
我希望以下程序可以解决您的问题
String dateStr = "Mon Jun 18 00:00:00 IST 2012";
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
Date date = (Date)formatter.parse(dateStr);
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
System.out.println("formatedDate : " + formatedDate);
答案 1 :(得分:6)
只需要添加:new SimpleDateFormat(“bla bla bla”,Locale.US)
public static void main(String[] args) throws ParseException {
java.util.Date fecha = new java.util.Date("Mon Dec 15 00:00:00 CST 2014");
DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
Date date;
date = (Date)formatter.parse(fecha.toString());
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" +
(cal.get(Calendar.MONTH) + 1) +
"/" + cal.get(Calendar.YEAR);
System.out.println("formatedDate : " + formatedDate);
}
答案 2 :(得分:2)
现代方法是使用java.time类。这些取代了麻烦的旧遗留日期时间类,例如Date
,Calendar
和SimpleDateFormat
。
解析为ZonedDateTime
。
String input = "Mon Jun 18 00:00:00 IST 2012";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM dd HH:mm:ss z uuuu" )
.withLocale( Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
提取仅限日期的对象LocalDate
,没有任何时间,也没有任何时区。
LocalDate ld = zdt.toLocalDate();
DateTimeFormatter fLocalDate = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
String output = ld.format( fLocalDate) ;
转储到控制台。
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ld: " + ld );
System.out.println( "output: " + output );
输入:2012年1月18日00:00:00 IST 2012
zdt:2012-06-18T00:00 + 03:00 [亚洲/耶路撒冷]
ld:2012-06-18
输出:18/06/2012
请参阅此code run live in IdeOne.com。
您的格式是数据交换的不良选择:难以被人阅读,难以通过计算机解析,使用非标准的3-4字母区域代码,并采用英语。
尽可能使用标准ISO 8601格式。在解析/生成日期时间值时,java.time类默认使用ISO 8601格式。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。例如,您对IST
的使用可能是爱尔兰标准时间,以色列标准时间(由java.time解释,见上文)或印度标准时间。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 3 :(得分:1)
您还可以在Excel中使用公式,以便将此类日期转换为excel可读取的日期类型:
=DATEVALUE(CONCATENATE(MID(A1,8,3),MID(A1,4,4),RIGHT(A1,4)))
你得到:12/7/2016
来自:Wed Dec 07 00:00:00 UTC 2016