如何使用指定格式的FastDateFormat将String解析为Date

时间:2017-04-20 08:00:36

标签: java date parsing datetime apache-commons

问题:

我需要在给定日期添加指定的天数。 该函数应返回Date类Object,并应使用FastDateFormat。

解决方案:

我编写了代码,但我需要输出yyyy-MM-dd HH:mm:ss。

当我将Input传递给此函数时

 public static void main(String[] args) throws ParseException {
    String dateFormat="yyyy-MM-dd HH:mm:ss";
        String s2=addDate(dateFormat);
        convertStringToDate(s2,dateFormat);

    }
    public static Date convertStringToDate(String dateInStr, String dateFormat) throws ParseException
    {
        FastDateFormat fdf=FastDateFormat.getInstance(dateFormat);//("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        date = fdf.parse(dateInStr);
        System.out.println("From convertStringToDate ");
        System.out.println(date);
        return date;
    }
public static String addDate(String dateFormat) throws ParseException{
            FastDateFormat fdf=FastDateFormat.getInstance(dateFormat);
            Calendar c = Calendar.getInstance();    
            c.add(Calendar.DATE,1);
            String s1=fdf.format(c.getTime());
            System.out.println("From addDate ");
            System.out.println(s1);
            return s1;
        }

convertStringToDate的预期输出:

2017-04-21 17:01:31

convertStringToDate的OutputShown:

Fri Apr 21 17:01:31 IST 2017
  

任何人都可以指导我如何解决上述问题?

4 个答案:

答案 0 :(得分:2)

你方法的最后两行没有意义:

fdf.format(c.getTime());
return  fdf.parse(fdf.format(c.getTime()));

format方法返回格式化为字符串的日期。在第一行中,您调用format,但不对返回值执行任何操作。所以,实际上,这条线没有任何作用。

在第二行中,首先将日期格式化为字符串,然后立即将字符串再次解析为Date对象。这也无济于事。你也可以写return c.getTime();

请注意Date个对象本身没有格式。您不能让Date对象以特定格式自动打印,例如yyyy-MM-dd HH:mm:ss,因为Date对象本身对格式化本身一无所知。

相反,您应该使用FastDateFormat对象将Date对象格式化为String,然后打印该字符串。例如:

String text = fdf.format(c.getTime());
System.out.println(text);

答案 1 :(得分:0)

以下代码行将以您所需的格式打印日期和时间。

  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.DATE,1);
  System.out.println(dateFormat.format(cal.getTime()));

答案 2 :(得分:0)

这些代码行中的问题:

fdf.format(c.getTime());
return  fdf.parse(fdf.format(c.getTime())); 

您的目标很简单,您只需要使用format()方法将Date格式化为日期/时间字符串:

String date = fdf.format(c.getTime());

解决方案将是:

public static String addDate(String dateFormat){
        FastDateFormat fdf=FastDateFormat.getInstance(dateFormat);
        Calendar c = Calendar.getInstance(); 
        c.add(Calendar.DATE,1);  
        String date = fdf.format(c.getTime()); 
        return date;
}

答案 3 :(得分:0)

当你返回时,你返回一个日期对象,你可以格式化日期对象,但你会得到输出为一个字符串。日期对象的格式将是不变的。

使用FastDateFormat- fdf.format(c.getTime())时。这部分将为您提供Date作为字符串的格式以及您需要的格式,但是当您尝试解析它并将其转换为Date Object时,它将具有以前的Constant格式。

您可以使用FastDateFormat将Date的格式化输出作为字符串,而不是格式化Date对象。

请查看此内容以获取进一步参考 - Date Formatting

  

创建SimpleDateFormat对象时,指定模式String。模式String的内容决定了日期和时间的格式。

     

代码根据传递给SimpleDateFormat构造函数的模式String格式化日期和时间。 format方法返回的String包含要显示的格式化日期和时间。

-from Oracle Docs.