将日期格式转换为其他格式时出错

时间:2014-11-29 12:08:42

标签: java date-format simpledateformat jdatechooser

我的格式为“ YYYY-MM-dd ”,我想将其转换为“ MMM dd,yyyy ”格式。

我用下面的代码来做这件事; 但是,当我转换“ 2014 -11-18”时,输出为“Sun Dec 29 00:00:00 IST 2013

我该如何解决这个问题?

DateFormat target=new SimpleDateFormat("MMM dd, yyyy");
String P_date="2014-11-18"
Date test1 = new SimpleDateFormat("YYYY-MM-dd").parse(P_date);

String converted_date=target.format(test1);
Date test=target.parse(converted_date);

4 个答案:

答案 0 :(得分:3)

y(小写Y)格式表示"年"。 Y(大写字母Y)你正在使用手段" WeekYear"。 只需使用y就可以了:

DateFormat target=new SimpleDateFormat("MMM dd, yyyy");
String P_date="2014-11-18";
Date test1 = new SimpleDateFormat("yyyy-MM-dd").parse(P_date);

String converted_date=target.format(test1);
Date test=target.parse(converted_date);

答案 1 :(得分:2)

Y返回周年,这也是你看周日的原因。改为使用y。

Date test1 = new SimpleDateFormat("yyyy-MM-dd").parse(P_date);

答案 2 :(得分:1)

你可以这样写

final JDateChooser startDateChooser = new JDateChooser();
startDateChooser.setDateFormatString("yyyy-MM-dd");
Date startDate = startDateChooser.getDate();
HashMap listMap = new HashMap();
listMap.put("Start Period is ", ((startDate.getYear() + 1900)+ "-" + (startDate.getMonth() + 1) + "-" +startDate.getDate()));

答案 3 :(得分:0)

TL;博士

LocalDate.parse( "2014-11-18" ).format(    // Parse string as `LocalDate` object, then generate a string in a certain format.
    DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM )
        .withLocale( Locale.US )           // Automatically localize to a locale’s human language and cultural norms.
)                                          // Returns a String.

详细

accepted Answer by Mureinik是正确的,您的格式化模式使用的代码不正确。

另一个问题是您对仅限日期的值感兴趣,但您使用的是日期时间类型。

此外,您正在使用麻烦的旧日期时间类,现在已被 java.time 类取代。

java.time

您的YYYY-MM-DD格式符合ISO 8601格式。解析/生成字符串时, java.time 类默认使用这些标准格式。因此无需指定格式化模式。

LocalDate ld = LocalDate.parse( "2014-11-18" ) ;

要生成其他格式的字符串,请使用DateTimeFormatterDateTimeFormatterBuilder类。

您可以指定硬编码格式设置模式。但是让java.time自动本地化可以更好地进行软编码。要进行本地化,请指定:

  • FormatStyle确定字符串的长度或缩写。
  • Locale确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大写,标点符号,分隔符等问题的文化规范

示例:

Locale l = Locale.US ;  // Or Locale.CANADA_FRENCH, Locale.ITALY, etc. 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( l );
String output = zdt.format( f );
  

2014年11月18日

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

如果JDBC driver符合JDBC 4.2或更高版本,您可以直接与数据库交换 java.time 对象。不需要字符串或java.sql。* classes。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore