尝试在空手道 DSL 中编写逻辑,我需要一个 yyyy-mm-dd 格式的日期。如果一天是星期六,那么应该将 2 天添加到当前日期

Trying to write a logic in Karate DSL where, I need a date in yyyy-mm-dd format. If day is Saturday then 2 day should get added to the current date

尝试用空手道 DSL 编写逻辑,我需要一个 yyyy-mm-dd 格式的日期。如果日期是星期六,则应将 2 天添加到当前日期,如果是星期日,则应添加 1 天。这是我正在尝试但不起作用的方法。

    * def logic =
      """
      function() {
  var date =  function() {
  var SimpleDateFormat = Java.type('java.text.SimpleDateFormat');
  var sdf = new SimpleDateFormat('yyyy-MM-dd');
  return sdf.format(new java.util.Date());
  }
  var SimpleDateFormat = Java.type('java.text.SimpleDateFormat');
  var sdf = new SimpleDateFormat('EEEE');
  var day =  sdf.format(new java.util.Date());
  var c = Java.type('java.util.Calendar');
  if (day== 'Saturday')
  return Calendar.add(date(),2);

  }
  """

旧版日期时间 API(java.util 日期时间类型及其格式 API、SimpleDateFormat)已过时且容易出错。建议完全停止使用,改用java.timemodern date-time API*.

使用现代API的解决方案:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Current date
        // Change the JVM's default ZoneId as applicable e.g. ZoneId.of("Asia/Kolkata")
        LocalDate date = LocalDate.now(ZoneId.systemDefault());

        if (date.getDayOfWeek() == DayOfWeek.SATURDAY)
            date = date.plusDays(2);
        else if (date.getDayOfWeek() == DayOfWeek.SUNDAY)
            date = date.plusDays(1);

        System.out.println(date);

        // Print day name
        System.out.println(date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH));
    }
}

输出:

2021-05-10
Monday

Trail: Date Time[=37= 中了解有关 modern date-time API* 的更多信息].


* 无论出于何种原因,如果您必须坚持Java 6 或Java 7,您可以使用ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and