Java 如何强制将字符串(通过格式化某个日期生成)转换为日期?

Java 如何强制将字符串(通过格式化某个日期生成)转换为日期?,java,Java,我有一个字符串(Jan12)(通过在当前日期{20-jan-2012}上应用一些操作生成),现在我想将这个字符串转换回日期格式。此外,该值应相同,即新日期对象的值应为jan12,而不是(2012年1月20日)。请帮忙。我已经试过了 java.sql.Date.valueOf("Jan12") [this throws IllegalArgumentException] 而且 new SimpleDateFormat("MMMyy").parse("Jan12") [By this Date

我有一个字符串(Jan12)(通过在当前日期{20-jan-2012}上应用一些操作生成),现在我想将这个字符串转换回日期格式。此外,该值应相同,即新日期对象的值应为jan12,而不是(2012年1月20日)。请帮忙。我已经试过了

 java.sql.Date.valueOf("Jan12") [this throws IllegalArgumentException]
而且

new SimpleDateFormat("MMMyy").parse("Jan12") [By this Date gets converted to 20-jan-2012]
需要输出:值为Jan12的日期对象(12是年份)
我的代码:new java.text.simpleDataFormat(“MMMyy”).format(new java.text.simpleDataFormat(“yyy-MM-dd”).parse(s))//这是一个字符串,它给出了Jan12

现在我真的想把Mycode转换成日期对象

    Date now = new Date();                       
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
    String s1 = df.format(now); 
    System.out.println(s1);    // 2012-01-20
    java.sql.Date d111=java.sql.Date.valueOf(s1);
    System.out.println(d111); // 2012-01-20
    DateFormat df1 = new SimpleDateFormat("MMMyy");
    String s2 = df1.format(d111);
    System.out.println(s2);  //Jan12
  Now i want s2 to be converted in Date object 
“转换”是什么意思?如何显示日期是另一个问题。查看日期的格式。

因此
12
是日,而不是年-您应该将其解析为日。此外,你还需要告诉它今年是哪一年:

System.out.println(new SimpleDateFormat("yyyyMMMdd").parse("2012" + "Jan12"));
输出

Thu Jan 12 00:00:00 EST 2012
如果12是一年

Calendar calendar = Calendar.getInstance();
calendar.setTime(new SimpleDateFormat("MMMyy").parse("Jan12"));
calendar.set(Calendar.DATE, 1);
Date date = calendar.getTime(); // First Jan 2012
如果12是一天

Calendar calendar = Calendar.getInstance();
calendar.setTime(new SimpleDateFormat("MMMdd").parse("Jan12"));
calendar.set(Calendar.YEAR, 2012);
Date date = calendar.getTime(); // 12 Jan 2012

正确地使用SimpleDataFormat类,它将完全满足您的需要

String str_date="12-Jan-2012";
DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); 
Date date = (Date)formatter.parse(str_date);  

注意:formatter.parse()方法抛出ParseException,捕获它

我知道您想将日期对象格式化为字符串表示形式。 您可以使用SimpleDataFormat进行此操作,类似于第二个示例:

Date d = new Date(112, 0, 20); //don't construct a date like this in production code, use a Calendar instance instead
String formattedDate = new SimpleDateFormat("MMMyy").format(d); // -> "Jan12"
请注意,您的日期对象表示一个特定的时间点,它将始终有一个与之关联的日期和时间。 如果要将日期与月份分辨率进行比较,则必须将日期和时间设置为中性值:

Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
d = cal.getTime();

只需扩展日期并自定义它,以使用您最喜欢的解析和格式化方法。

@Aditya

如果您使用的Str2给出“Jan12”,则该字符串中没有日期部分,因此如果您将其转换为日期对象,它将得到“Jan”作为月份,12作为年份,但在该字符串中找不到“day”

如果你使用下面的代码

 try
    {
            Date d2 = df1.parse(s2); //here s2 is your string which gives "JAN12"
            System.out.println(d2);
    }
    catch(ParseException pe)
    {
        System.out.println("parse exception..");
    }
上述代码的输出将为:

2012年1月1日星期日00:00:00国际标准时间

请注意,此处的“天”部分重置为每月的第一天


因此,无法获得完整的日期对象作为原始日期,保留月份和年份,但丢失了日期部分。

没有年份的日期不是日期-因此您无法按照所述方式创建日期。是否要创建没有年份的日期???java.sql.date.valueOf(new java.text.SimpleDateFormat(“MMM-yy”).format(new java.text.SimpleDateFormat(“yyyy-MM-dd”).parse(S)))我原以为你的想法简单明了,但我得到了1970年1月12日新的java.text.SimpleDateFormat(“mmy”).format(new java.text.SimpleDateFormat(“yyyyMM-dd”).parse(S))//这里是一个字符串,上面的表达式给出了值jan12(一个字符串)当s是2012-01-17时..现在我想要它的Date对象,五个相同的jan12new java.text.SimpleDateFormat(“MMMyy”).format(new java.text.SimpleDateFormat(“yyyyMM dd”).parse(s));//这里s是一个字符串,上面的表达式给出值jan12(一个字符串)当s是2012-01-17时..现在我想要它的Date对象,它有五个相同的jan12my代码--new java.text.SimpleDateFormat(“MMMyy”).format(new java.text.SimpleDateFormat(“yyyyMM dd”).parse(s));//这里s是一个字符串,上面的表达式给出值jan12(一个字符串)当s是2012-01-17时..现在我想要它的Date对象,五个相同的jan12Date Now=new Date();DateFormat df=new SimpleDateFormat(“yyyy MM dd”);字符串s1=df.format(Now);System.out.println(s1);java.sql.Date d111=java.sql.Date.valueOf(s1);System.out.println(d111);DateFormat df1=new SimpleDateFormat(“MMMyy”);字符串s2=df1.format(d111);System.out.println(s2);Calendar Calendar=Calendar.getInstance();Calendar.setTime(新的SimpleDataFormat(“MMMyy”).parse(s2));Calendar.set(Calendar.DATE,1);DATE-DATE=Calendar.getTime();System.out.println(DATE);//打印Sun Jan 01 00:00:00 ISTmycode-->new java.text.simpleDataFormat(“MMMyy”).format(new java.text.simpleDataFormat(“yyyyMM dd”).parse(s));//这里s是一个字符串,上面的表达式在s为2012-01-17时给出值jan12(一个字符串)。现在我想要它的日期对象,它的五个相同的jan12