powershell 在Azure devops中使用Get Commit API时,在2个日期时间之间返回的结果比预期的多?

pqwbnv8z  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(103)

我正在尝试获取一组与azure devops上两个日期之间的一些提交相关的工作项。我用来检索这些工作项的API如下所示:
https://learn.microsoft.com/en-us/rest/api/azure/devops/git/commits/get-commits?tabs=HTTP
这是我用来获取提交集的URL:

"https://dev.azure.com/$organization/$project/_apis/git/repositories/$repository/commits?searchCriteria.fromDate=$baselineCommitDate&searchCriteria.toDate=$latestCommitDate&searchCriteria.includeWorkItems=$true&api-version=6.1-preview.1"

字符串
URL中的变量是PowerShell变量,如下所示:$organization$project$repository$baselineCommitDate$latestCommitDate
值得注意的是,日期需要是美国格式,即。MM/DD/YYYY,如以下示例06/12/2023 12:41 PM是2023年6月12日。
无论如何,当我尝试在填充了变量的PowerShell脚本中运行这个API调用时,我得到的结果比预期的要多。从我指定的日期到现在,我得到了100个结果,而我应该得到60个。
有没有其他人在使用此API时遇到问题?

balp4ylt

balp4ylt1#

备注

  • 鉴于这些文档没有 * 描述 * 所需的格式,只提供了 * 示例 *,因此不清楚下一节中描述的差异是否重要。(如果有人知道在哪里可以找到描述,请告诉我们。
    • 可以想象 * -希望(我自己无法验证)-(也)接受 * 不同的 * 日期/时间格式,例如 * 国际 *,基于ISO 8601的格式,如JSON * 响应 * 中使用的格式(例如,2018-06-15T17:06:53Z
  • 为此,需要在[datetime]示例上显式调用.ToUniversalTime().ToString('u').Replace(' ', 'T'),以根据标准u说明符生成所需的字符串格式。
  • 一个简化的例子(注意需要将链接的方法调用包含在$(...),子表达式操作符中):
"...Date=$($baselineCommitDate.ToUniversalTime().ToString('u').Replace(' ', 'T'))"

字符串

  • 正如你所说的,文档中的示例建议使用美国英语日期/时间字符串格式,例如。7/3/2023 9:44:29 AM
  • 但是,请注意,PowerShell的 * 字符串插值 *,即在"..."(一个可扩展字符串)中嵌入变量引用不使用以下格式:
  • PowerShell的字符串插值是 culture-invariant:它使用[cultureinfo]::InvariantCulture的规则,虽然 * 基于 * 美国英语文化,但有一些差异,特别是使用 *24小时 * 时间格式而不是使用AM/PM后缀,并在默认格式中使用2位0填充的月份和日期。
  • 要生成美国英语格式,请在[datetime]示例上调用.ToString([cultureinfo] 'en-US'),如下例所示:
$baselineCommitDate = Get-Date
"
String interpolation: $baselineCommitDate
vs. 
US-English format:    $($baselineCommitDate.ToString([cultureinfo] 'en-US'))
"

  • 这将输出如下内容:
String interpolation: 07/03/2023 10:01:22
vs. 
US-English format:    7/3/2023 10:01:22 AM

相关问题