【问题标题】:Getting a month as an integer, and taking a year from that as part of a string message以整数形式获取一个月,并从中获取一年作为字符串消息的一部分
【发布时间】:2019-01-14 14:12:27
【问题描述】:

我有下面的代码,它从 yyyy-mm-dd 格式的日期选择中获取最早的日期,以及一条消息。我需要使用返回的日期,通过使用 If 和 Else 的声明语句填充我的消息,我认为。 对于我的第一个 yyyy 值,如果月份小于 8(八月),那么我需要使用上面提到的原始选择中的 yyyy-1,如果它的月份大于 8(八月),那么我需要使用返回的yyyy 从我原来的选择。 然后我需要这个第一个值,然后返回第二年,这将是第一个 yyyy 值加上 1 年。 我正在使用 Powershell,所以 .net 中的东西会非常方便。

$dt = New-Object System.Data.DataTable;
$dt.Columns.Add("LearnStartDate");
$dt.Columns.Add("Message");

$dr = $DS.Tables["LearningDelivery"].Select("LearnStartDate =  
min(LearnStartDate)")[0];


Write-Output $dt.Rows.Count;

$dt.Rows.Add($dr["LearnStartDate"].Substring(0,10),"Our message");

【问题讨论】:

  • 此代码的返回值附在屏幕截图中
  • 从来没有见过用那一堆词隐藏你真正想要的东西的问题。如果您将月份作为整数,则其中没有年份。 IMO 如果您告诉 $DS 数据的来源,那将是最简单的。
  • $ds 是一个作为新对象创建的数据集,其中填充了来自 xml 文件的数据,其中包括这些日期。

标签: .net string powershell date


【解决方案1】:

PowerShell 实际上可以使用[datetime] 加速器将您的字符串日期自动转换为日期对象:

[datetime]$LearnStartDate = $dr["LearnStartDate"]

返回到$LearnStartDate 的 Datetime 对象具有各种属性,包括可以用来查询月份值的.Month 属性,以及可以用来将年份加 1 的 .AddYears 方法:

if ($LearnStartDate.Month -lt 8) { 
    $FirstYear = $LearnStartDate.AddYears(1).Year 
} 
Else { 
    $FirstYear = $LearnStartDate.Year 
}

$SecondYear = $FirstYear + 1

"FirstYear: $FirstYear"
"SecondYear: $SecondYear"

请注意,使用 [DateTime] 将使用您本地计算机的本地化设置,因此您可能会得到不同的结果。

【讨论】:

  • 太棒了。谢谢!!
  • 关于 [datetime] 的属性和方法的好建议,但在 PowerShell 中强制转换为 [datetime] 始终使用 invariant 文化,而不是 current一 - 见stackoverflow.com/a/37603732/45375
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 2016-06-13
相关资源
最近更新 更多