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

时间:2012-01-20 09:48:42

标签: java

我有一个字符串(Jan12)(通过在当前日期应用一些操作生成{20-jan-2012})现在我想将此字符串转换回Date格式。此值也应相同,即新的Date对象应具有值jan12而不是(20-jan-2012)。请帮忙。我试过做

 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.SimpleDateFormat(“MMMyy”)。format(new java.text.SimpleDateFormat(“yyyy-MM-dd”)。parse(s))//这是一个给出Jan12的字符串

现在我真的想将 Mycode 转换为Date对象

    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 

7 个答案:

答案 0 :(得分:1)

@Aditya,

如果您使用提供“Jan12”的Str2,则该字符串中没有日期部分,因此如果您将其转换为日期对象,它将获得“Jan”作为月份,12年作为年份,但它无法找到“那天“在那个字符串中。

如果您使用以下代码

 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..");
    }

上述代码的输出将是:

  

Sun Jan 01 00:00:00 IST 2012

请注意,这一天部分重置为该月的第一天

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

答案 1 :(得分:0)

你是什么意思“被转换”?您的日期显示方式是一个单独的问题。查看格式化日期。

答案 2 :(得分:0)

所以12,而不是 - 您应该这样解析它。 Aslo,你需要告诉它这是哪一年:

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

输出

Thu Jan 12 00:00:00 EST 2012

答案 3 :(得分:0)

如果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

答案 4 :(得分:0)

正确使用SimpleDateFormat类,它将完全按照您的意愿执行

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

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

答案 5 :(得分:0)

我知道您希望将格式您的Date对象转换为String表示形式。 你可以使用SimpleDateFormat,类似于你的第二个例子:

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"

请注意,您的Date对象代表一个特定的时间点,它始终具有与之关联的日期和时间。 如果要将日期与一个月的分辨率进行比较,则必须将日期和时间设置为中性值:

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

答案 6 :(得分:0)

只需延长日期并自定义它即可使用您喜欢的解析和放大格式方法。