以dd-MMM-yyyy格式将日历转换为日期

时间:2014-04-19 16:00:58

标签: java simpledateformat

我想在10-APR-2014添加17天并将日期转换为dd-MMM-yyy y格式,但我得到Sun Apr 27 00:00:00 GMT+05:30 2014

这是我的代码:

import java.util.*;
import java.text.*;
public class HelloWorld{

    public static void main(String []args){
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.DATE, 17);
        String output = sdf.format(c.getTime());
        System.out.println(output);
        System.out.print(new SimpleDateFormat("dd-MMM-yyyy").parse(output));
    }
}

如何将输出设为27-Apr-2014

2 个答案:

答案 0 :(得分:2)

您正在打印从日历日期格式化的字符串解析的日期。

而是打印格式化的日历日期:

System.out.print(new SimpleDateFormat("dd-MMM-yyyy").format(c.getTime()));

如果显示和使用日期是不相同的,请执行以下操作:

Date date; // from Calendar or wherever
String str = new SimpleDateFormat("dd-MMM-yyyy").format(date));
// display str 

然后,当您想要对所选日期执行某些操作时:

String selection;
Date date = new SimpleDateFormat("dd-MMM-yyyy").parse(selection));
// do something with date

答案 1 :(得分:0)

answer by Bohemian是正确的。在这里,我提出了另一种解决方案。

避免使用j.u.Date

与Java捆绑在一起的java.util.Date和.Calendar类非常麻烦。避免他们。在Java 8中使用Joda-Time或新的java.time包。

日期 - 仅

如果您只需要一个没有任何时间组件的日期,则Joda-Timejava.time都会提供LocalDate课程。

时区

即使仅限日期,您仍然需要一个时区才能获得“今天”。在任何时候,日期可能会变化±1,具体取决于您在地球上的位置。如果未指定时区,则将应用JVM的默认时区。

示例代码

以下是Joda-Time 2.3中的一些示例代码。

根据某个时区确定“今天”。加上十七天。

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
LocalDate today = new LocalDate( timeZone );
LocalDate seventeenDaysLater = today.plusDays( 17 );

生成日期时间值的字符串表示...

DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd-MMM-yyyy" );
String output = formatter.print( seventeenDaysLater );

转储到控制台...

System.out.println( "today: " + today );
System.out.println( "seventeenDaysLater: " + seventeenDaysLater );
System.out.println( "output: " + output );

跑步时......

today: 2014-04-21
seventeenDaysLater: 2014-05-08
output: 08-May-2014