Java 如何转换;2012年6月18日星期一00:00:00 IST”;到2012年6月18日?

Java 如何转换;2012年6月18日星期一00:00:00 IST”;到2012年6月18日?,java,date,Java,Date,我有一个类似以下的值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

我有一个类似以下的值
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:无法解析的日期:“2012年6月18日星期一00:00:00 IST”
我希望下面的程序能够解决您的问题

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);    

只需要添加:新的SimpleDataFormat(“bla-bla-bla”,Locale.US)


您还可以使用excel中的公式将此类日期转换为excel可以读取的日期类型:
=DATEVALUE(连接(中间(A1,8,3)、中间(A1,4,4)、右边(A1,4))

您将获得:
12/7/2016
发件人:
Wed Dec 07 00:00:00 UTC 2016

java.time 现代的教学方法是以课堂为中心的。它们取代了麻烦的旧式日期时间类,如
日期
日历
、和
简化格式

解析为
ZoneDateTime

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年6月18日星期一00:00:00 IST

zdt:2012-06-18T00:00+03:00[亚洲/耶路撒冷]

劳工处:2012-06-18

产出:18/06/2012

看这个

格式选择不当 您的格式对于数据交换来说是一个糟糕的选择:人类难以阅读,计算机难以解析,使用非标准的3-4个字母的区号,并且假设为英语

尽可能使用标准格式。默认情况下,java.time类在解析/生成日期时间值时使用格式

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)。例如,您使用的
IST
可能是爱尔兰标准时间、以色列标准时间(如上所示,由java.Time解释)或印度标准时间


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

请参阅本节的相关部分page@Kazekage你现在可以看到我的编辑了,希望你知道答案。同意托尼的观点,如果不让其他人回答,你可以尝试回答,而不是投票给伟大的评论。可能重复@SAR相同的问题,请帮助我。我认为dateStr示例的格式应该是:SimpleDateFormat(“EEE MMM dd HH:mm:ss z yyyy”)谢谢,它帮助我:)代码工作正常,但应该是z而不是z。@Pascal我使用相同的格式,但不能使用
(“EEE-MMM-dd-HH:mm:ss-z-yyyy”)
这如何增加价值?这个问题是关于Java编程,而不是Microsoft Excel电子表格。
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ld: " + ld );
System.out.println( "output: " + output );