【问题标题】:How to get in SoapUI the date minus days? [duplicate]如何在 SoapUI 中获取日期减去天数? [复制]
【发布时间】:2016-02-01 13:53:51
【问题描述】:

在认为这是重复之前,请阅读。

我一直在阅读这里和其他地方的帖子,但无法弄清楚为什么日期一开始就无效。

我正在使用 SoapUI Pro 进行调用并已将 XML 放入提交一些代码参考的 XML 中,以便创建过去的日期,但我需要它们与今天相关,而不是未来或遥远的过去所以我使用了以下

${=import java.text.SimpleDateFormat;
new SimpleDateFormat("YYYY-MM-DD").format(new Date()-6);}

当我向 Web 服务提交调用时,我得到了这个错误。

“2016-02-32”不是“日期”的有效值

有人能解释一下为什么会这样吗? 我需要什么来纠正这个问题?

最终我需要能够做两件事。

  1. 以过去 6 天的 YYYY-MM-DD 格式创建日期
  2. 以 YYYY-MM-DD HH:mm:ss.SSSXXX 格式创建日期时间

非常感谢您对此提供的帮助。 我不应该使用日期吗? 我已经看到一些正在使用日历和对 Java 8 的新引用,这只是今天早上时间紧迫的事情,我不想深入任何兔子洞来跟踪可能是问题的事情,因为服务器不是目前使用 Java 8。

【问题讨论】:

  • 我指定了错误的格式。请参阅下面的有用指南的链接,该指南显示了要使用的正确日期格式语法。

标签: java date datetime calendar soapui


【解决方案1】:

试试这样的

${=import java.text.SimpleDateFormat; Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -6); new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());}

你也可以用它来表示日期和时间,只需替换格式化字符串。

格式化日期的正确模式是yyyy-MM-dd(参见SimpleDateFormat javadoc)

  • y - 表示当前年份
  • Y - 表示周年,一年中的第一周和最后一周可以与年不同 (explained difference)
  • d - 一个月中的一天
  • D - 一年中的一天

根据How to subtract X day from a Date object in Java?回答

【讨论】:

  • 我已经工作了 40 分钟。试图找出服务中发生了什么。即使使用上面没有减去天 ${=import java.text.SimpleDateFormat;日历 cal = Calendar.getInstance(); new SimpleDateFormat("YYYY-MM-DD").format(cal.getTime());} 服务器不断响应“2016-02-32”不是“日期”的有效值。如果我只是硬编码 2016-02-01 的日期,那么它会很好地完成。什么给了?
  • 我在本地使用 SoapUI 非专业版 5.0.0 对其进行了测试,在 SoapUI 中使用了一个模拟服务,它工作得很好。也许有一些问题:您的 SoupUI 版本或者您已将某些非公历设置为默认值?尝试在 SoapUI 中设置模拟服务并验证生成的请求是否符合预期。如果请求正确,那么服务器端可能存在问题?
  • 我之前没有注意到的是日期格式模式不正确。应该是 'yyyy-MM-dd'。
  • 谢谢 MJar,我一回到办公室就试试看。
  • 优秀的捕获。我根本没有看到。在过去的一个月里,它恰好运行良好,因为所有的日子都确实有效。 32 不是一个月的有效日期。非常感谢您的帮助。我确信这将解决我在 SoapUI 中遇到的问题。
【解决方案2】:

再次感谢@MJar。 这些是我在通过 SoapUI Pro 提交并工作的 XML 中使用的格式!

注意:代码都在一行中,只是因为我这样做是为了放入 XML 而不是多行。

2016-02-02

${=import java.text.SimpleDateFormat; Calendar cal = Calendar.getInstance(); new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());}

2016-02-03T09:54:55.866-05:00

${=import java.text.SimpleDateFormat; Calendar cal = Calendar.getInstance(); new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").format(cal.getTime());}

或者让它成为过去的一天(这个案例是 6 天前)

${=import java.text.SimpleDateFormat; Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -6); new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());}

【讨论】:

    【解决方案3】:

    这在 SoapUI v5.3.0 中适用于我:

    ${=new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date() - 6)}

    【讨论】:

      【解决方案4】:

      ${=def now=new Date();now.format("yyyy-MM-dd")} 如果你需要它是昨天或未来的日期,就像 +x 到 Date() 例子 ${=def now=new Date()+10;now.format("yyyy-MM-dd")}

      【讨论】:

      • 请格式化您的答案并添加解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      相关资源
      最近更新 更多