【问题标题】:How to get a required Date format using SimpleDateFormat [duplicate]如何使用 SimpleDateFormat 获取所需的日期格式 [重复]
【发布时间】:2017-12-18 12:27:28
【问题描述】:

我的方法是:

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

【问题讨论】:

  • 日期本身在java中没有格式,当您调用df.format(date3);时,此方法将返回一个由您的SimpleDateFormat格式化的字符串,但它根本不会改变date3的任何内容。所以调用 format 而不对返回值做任何事情是没有意义的。
  • 为什么你认为mm 代表月份?
  • 我建议你不要使用早已过时的Date 类,尤其要避免臭名昭著的麻烦SimpleDateFormat 类。 java.time, the modern Java date and time API 使用起来更好。

标签: java selenium simpledateformat


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我们应该始终尝试找出更方便的方法,以便我们可以进一步使用它。在这种情况下,我们可以使用以下方法:

      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
      

      【讨论】:

      • @ChathuNM 嘿兄弟!你不想使用更方便和可重复使用的方法吗?如果是这样,那么您可以再考虑和决定。
      • 我强烈建议通过java.time,现代Java 日期和时间API。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      相关资源
      最近更新 更多