Java 如何使用SimpleDataFormat获取所需的日期格式

Java 如何使用SimpleDataFormat获取所需的日期格式,java,selenium,simpledateformat,Java,Selenium,Simpledateformat,我的方法是: public String changeCurrentDate(Integer variant){ String currentTime = TestApp.getInstance().getDriver().findElement(By.id("common.HeaderComponent.mainLayout.serverTimeLabel")).getText(); String currentDate = currentTime.substring(0, 1

我的方法是:

public String changeCurrentDate(Integer variant){
    String currentTime = TestApp.getInstance().getDriver().findElement(By.id("common.HeaderComponent.mainLayout.serverTimeLabel")).getText();
    String currentDate = currentTime.substring(0, 10);
    System.out.println("currentDate " +currentDate);
    String date = null;
    DateFormat df = new SimpleDateFormat("dd/mm/yyyy");
    try{
        Date date3 = df.parse(currentDate);
        df.format(date3);
        System.out.println("date3 " +date3);
        Date previousDate = DateUtils.addDays(date3, variant);
        date = previousDate.toString();
        return date;
    }catch (Exception e){
    }
    return date;
}
注:currentTime变量的值始终与“18/12/2017”类似 我希望日期的结果为dd/mm/yyyy格式。但它总是给出这样的“Wed Jan 18 00:12:00 IST 2017”

运行时结果:

currentDate 18/12/2017
date3 Wed Jan 18 00:12:00 IST 2017

format只返回应用格式的日期的字符串表示形式,因此代码中的行无效

尝试更改代码以使用格式化输出:

public String changeCurrentDate(Integer variant){
    String currentTime = TestApp.getInstance().getDriver().findElement(By.id("common.HeaderComponent.mainLayout.serverTimeLabel")).getText();
    String currentDate = currentTime.substring(0, 10);
    System.out.println("currentDate " +currentDate);
    DateFormat df = new SimpleDateFormat("dd/mm/yyyy");
    Date date3 = df.parse(currentDate);
    System.out.println("date3 " + df.format(date3));
    Date previousDate = DateUtils.addDays(date3, variant);
    return previousDate.toString();
}

另外-捕获异常是不好的,所以您应该删除它。

您应该返回格式化的日期,而不是日期的toString()。试试这个:

Date previousDate = DateUtils.addDays(date3, variant);
return df.format(previousDate);

我们应该总是设法找到更方便的方法,以便我们能进一步利用它。在这种情况下,我们可以使用以下方法:

public String dateString(String input) {        
    SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
    String formattedDate = "";        
    try {
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        formattedDate = formatter.format(date);         
    } catch (ParseException e) {            
        e.printStackTrace();
    }

    return formattedDate;
}
您可以按如下方式轻松调用此方法:

Date date3 = df.parse(currentDate);
df.format(date3);

String input = date3.toString();            
String requiredDate = dateString(input);

System.out.println("requiredDate: "+ requiredDate);
返回如下输出:

requiredDate: 18/12/2017

当您调用
df.format(date3)时,日期本身在java中没有格式
此方法将返回一个由SimpleDataFormat格式化的字符串,但它根本不会更改
date3
的任何内容。因此,不使用返回值调用格式是毫无意义的。为什么您认为
mm
代表月份?我建议您不要使用过时的
Date
类,尤其要避免臭名昭著的
SimpleDataFormat
类。和他一起工作真是太好了。@ChathuNM嘿,兄弟!您不想使用更方便、可重用的方法吗?如果是这样,那么您可以再次思考和决定。我强烈建议更方便的方法是通过现代java日期和时间API
java.time