Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解析";dd MM“;获取当前年份的日期格式;_Java_Android_Date_Simpledateformat_Date Parsing - Fatal编程技术网

Java 如何解析";dd MM“;获取当前年份的日期格式;

Java 如何解析";dd MM“;获取当前年份的日期格式;,java,android,date,simpledateformat,date-parsing,Java,Android,Date,Simpledateformat,Date Parsing,我必须使用Java解析“17 Jun”格式的日期。但问题是,当我尝试使用SimpleDataFormat解析“dd MM”格式时,它返回为“Wed Jun 17 00:00:00 IST 1970”。是否可能得到当前(2014)年而不是1970年 我的结果: 1970年6月17日 预期结果: 2014年6月17日你喜欢这样吗 Date date = new SimpleDateFormat("dd-MMM-yyyy").parse("17-Jun-"+ Calendar.getInstance(

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

我的结果:
1970年6月17日

预期结果:
2014年6月17日

你喜欢这样吗

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

    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);
看看这个

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

希望能有帮助……:)

我想最简单的方法是:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MMM/dd");
Date date = new Date();
System.out.println("Time is: " + dateFormat.format(date) );
这正是你想要的。也看到


您必须编写一个实用方法,SimpleDataFormat中没有任何东西可以将不存在的年份解释为当前年份。大概是这样的:

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

}
试试这个:

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

您的问题将得到解决。

晚了一点,但如果您真的不想使用日历-正如我从您的评论中收集到的上述正确答案所述-(不建议使用不推荐使用的方法,但仍然):

输出:

2014年6月17日星期二00:00:00国际标准时间

试试看

输出


这里给出的所有答案或多或少都是正确的,但我注意到一个细节方面仍然被忽略,即日和月的组合是否适合今年(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));
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());


设置时区,然后获取,使用dd-mmm………一个简单的选项:在解析之前附加当前年份(在您感兴趣的任何时区)。我知道这并不理想,但它很实用……你为什么不简单地将当前年份添加到输出中呢Jonskeet&Arun:我必须解析另一个[dd-MMMM”,“MMMM-yy”,“MMMM-yyy”,“MMMM/dd/yyy”,“MM-dd/yyyy”,“MM-dd-mmm-yy”,“dd-MMMM-yy”,“dd-MMMM-yyyy”,“dd/MMMM/yyyyy”,“dd/MMMM/yyyyy”]格式。因此,我不能为它添加当前年份。@Rohit:我会检查它。Nand和Prabakaran:您的两个代码都可以工作,但是有没有默认的方法/方式来获取当前年份的日期?是的,您可以使用c.get(Calendar.date)这将为您提供今天的日期谢谢。它非常有用。Aditya Kamath&Nand:我的意思是在调用代码'Date startDate=new SimpleDateFormat(“dd MM”).parse(“6月17日”)时“如果没有使用Calendar类,那么有没有任何选项可以使用'2017/JUNE/1970'作为结果。嗯……据我所知,我恐怕没有……但是你为什么不想使用Calendar?好的,没问题。我也可以使用Calendar api。非常感谢。Greg Case:谢谢。PopoFibo:我现在就试试。@user492888好的greatThank you”。但唯一的问题是它是不推荐的API。@user492888是的,确实是这样,我在上面的评论中看到您根本不想使用日历-因此不推荐的方法您的代码可以工作,但我们需要手动提供2014年(本年度)还是可以自动提供它?Meno Hochschild:谢谢。我将对错误予以宽容。
Before Changing :: 17/Jun/1970
After Changing  :: 17/Jun/2014
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));
   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());