如何解析“dd-MM”日期格式以获得当前年份?“

时间:2014-01-08 05:23:14

标签: java android date simpledateformat date-parsing

我必须使用Java解析“ 17-Jun ”格式日期。但问题是当我尝试使用SimpleDateFormat解析“ dd-MM ”格式时它是返回“Wed Jun 17 00:00:00 IST 1970”。是否有可能获得当前(2014)年而不是1970年。

我的结果:
17 / JUNE / 1970

预期结果:
17 / JUNE / 2014

10 个答案:

答案 0 :(得分:5)

看看这个..

Calendar c = Calendar.getInstance();
c.set(Calendar.DATE, 17);
c.set(Calendar.MONTH, 5);
c.set(Calendar.YEAR, c.get(Calendar.YEAR));
Date date=new Date(c.getTimeInMillis());
SimpleDateFormat simpleDateformatter = new SimpleDateFormat("dd/mmm/yyyy");
String convertedDate = simpleDateformatter .format(date);

要获得年份,您可以使用

Calendar cal = Calendar.getInstance();
cal.get(Calendar.YEAR) will fetch you current year

希望它有所帮助...... :)

答案 1 :(得分:3)

试试这个

    Calendar c = Calendar.getInstance();
        c.set(Calendar.DATE, 17);
       c.set(Calendar.MONTH, 5);
    c.set(Calendar.YEAR, c.get(Calendar.YEAR));
Date d=new Date(c.getTimeInMillis());
    SimpleDateFormat formatter = new SimpleDateFormat("dd- mmm");
        String conDate = formatter.format(d);

答案 2 :(得分:2)

这样做

Date date = new SimpleDateFormat("dd-MMM-yyyy").parse("17-Jun-"+ Calendar.getInstance().get(Calendar.YEAR));

答案 3 :(得分:2)

你必须编写一个实用工具方法,SimpleDateFormat中没有任何东西可以将不存在的年份解释为当前年份。像这样:

public static Date parseDate(String dateString) throws ParseException {

    //determine current year
    Calendar today = Calendar.getInstance();
    int currentYear = today.get(Calendar.YEAR);

    //parse input
    SimpleDateFormat format = new SimpleDateFormat("dd-MMM");
    Date parsed = format.parse(dateString);

    // set current year on parsed value
    Calendar cal = Calendar.getInstance();
    cal.setTime(parsed);
    cal.set(Calendar.YEAR, currentYear);

    return cal.getTime();

}

答案 4 :(得分:2)

试试这个:

SimpleDateFormat dfDate  = new SimpleDateFormat("dd-MM-yyyy");
java.util.Date d = null;

try {
                d = dfDate.parse("17-Jun-"+ Calendar.getInstance().get(Calendar.YEAR));

            } catch (java.text.ParseException e) {
                e.printStackTrace();
            }
System.out.println(""+d );

你的问题将得到解决。

答案 5 :(得分:1)

我想最简单的方法就是这样做:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MMM/dd");
Date date = new Date();
System.out.println("Time is: " + dateFormat.format(date) );

这可以满足您的需求。另见

http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html

答案 6 :(得分:1)

迟到了,但如果你真的根本不想使用日历 - 我从你的评论中收集到上面的正确答案 - (不建议使用不推荐的方法,但仍然):

SimpleDateFormat format = new SimpleDateFormat("dd-MMM");
Date date = format.parse("17-JUN");
date.setYear(new Date().getYear());
System.out.println(date);

<强>输出:

  

Tue Jun 17 00:00:00 IST 2014

答案 7 :(得分:1)

这里给出的所有答案或多或少都是正确的,但我注意到一个细节方面仍然被忽视,即如果日和月的组合适合当前年份(2月29日的问题)。所以我建议严格解析如下:

String ddMMM = "17-Jun";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
sdf.setLenient(false); // in order to check for "29-Feb"
TimeZone tz = TimeZone.getDefault(); // or change to your specific time zone
Date date = 
  sdf.parse(ddMMM + "-" + new GregorianCalendar(tz).get(Calendar.YEAR));

答案 8 :(得分:1)

java.time

在Java 8中,您可以执行以下操作:

   DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-MMM");
   MonthDay md = MonthDay.parse("17-Jun", dtf);
   LocalDate d = LocalDate.now().with(md);
   System.out.println(d.getDayOfMonth());
   System.out.println(d.getMonthValue());
   System.out.println(d.getYear());

答案 9 :(得分:0)

尝试,

    String s2 = "Wed Jun 17 00:00:00 1970";
    SimpleDateFormat sdf1 = new SimpleDateFormat("E MMM dd hh:mm:ss yyyy");
    SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MMM/yyyy");
    try {

        Date d1 = sdf1.parse(s2);
        System.out.println(d1);

        String s3 = sdf2.format(d1);
        System.out.println("Before Changing :: "+s3);

        Calendar cal = Calendar.getInstance();
        cal.setTime(d1);
        cal.add(Calendar.YEAR, 2014-1970);
        d1 = cal.getTime();
        String s4 =  sdf2.format(d1);
        System.out.println("After Changing  :: "+s4);

    } catch (ParseException e) {
        e.printStackTrace();
    }

输出

Before Changing :: 17/Jun/1970
After Changing  :: 17/Jun/2014