从周数获取近似日期

问题描述 投票:1回答:1

我从WMI获取有关监视器的信息。有一些名为“WeekOfManufacture”和“YearOfManufacture”的属性。在这种情况下,它是:

Week : 24
Year : 2009

我正在尝试获得与此相对应的大致日期。

我这样做是为了得到一个非常粗略的估计:

(Get-Date -Date $YearOfManufacture/01/01).AddDays(7*$WeekOfManufacture)

但显然“周”并不总是有7天。

什么是最好的方法?

我现在使用的完整代码是:

$Monitors = Get-WmiObject WmiMonitorID -Namespace root\wmi

foreach ($Monitor in $Monitors) {
    $Manufacturer = ($Monitor.ManufacturerName -notmatch 0 | ForEach{[char]$_}) -join ""
    $Code = ($Monitor.ProductCodeID -notmatch 0 | ForEach{[char]$_}) -join ""
    $Name = ($Monitor.UserFriendlyName -notmatch 0 | ForEach{[char]$_}) -join ""
    $Serial = ($Monitor.SerialNumberID -notmatch 0 | ForEach{[char]$_}) -join ""

    $WeekOfManufacture = $Monitor.WeekOfManufacture
    $YearOfManufacture = $Monitor.YearOfManufacture

    $DateManufacture = (get-date -Date $YearOfManufacture/01/01).AddDays(7*$WeekOfManufacture)

    "$Manufacturer - $Code - $Name - $Serial - $DateManufacture" 
}

返回类似(info obfuscated)的东西:

SAM - 1234 - SycMastr - XXXX - 06/18/2009 00:00:00
SAM - 1234 - SycMastr - XXXX - 09/10/2009 00:00:00
powershell date week-number
1个回答
1
投票

来自Technet的答案完美无缺(https://social.technet.microsoft.com/Forums/en-US/f65c80b0-f74f-4234-870c-c5ffe8d9b1ea/powershell-get-date-from-week-number-of-year?forum=ITCG):

Function FirstDateOfWeek
{
    param([int]$year, [int]$weekOfYear)

    $jan1 = [DateTime]"$year-01-01"
    $daysOffset = ([DayOfWeek]::Thursday - $jan1.DayOfWeek)

    $firstThursday = $jan1.AddDays($daysOffset)
    $calendar = ([CultureInfo]::CurrentCulture).Calendar;

    $firstWeek = $calendar.GetWeekOfYear($firstThursday, [System.Globalization.CalendarWeekRule]::FirstFourDayWeek, [DayOfWeek]::Monday)

    $weekNum = $weekOfYear

    if($firstweek -le 1) { $weekNum -= 1 }

    $result = $firstThursday.AddDays($weekNum * 7)
    return $result.AddDays(-3)    
}

FirstDateOfWeek -year 2009 -weekOfYear 24

8 juin 2009 00:00:00
© www.soinside.com 2019 - 2024. All rights reserved.