2014-05-05 94 views
1

我有一個運行powershell腳本的計劃任務,該腳本運行帶有一些參數的可執行文件。其中一個參數是當前的週數。如何在PowerShell中確定每週的第一天?

我使用PowerShell中下面的代碼檢索weeknumber:

get-date -uformat %V 

這似乎返回不正確的weeknumber

  • 2014年5月4日(星期日),返回星期NR 18 (如預期)
  • 2014年5月5日(星期一),返回周NR 18(預期19)
  • 2014年5月6日(星期二),返回周NR 19(如預期)

在我的註冊表一週的第一天設置爲Monday(HKEY_CURRENT_USER->控制面板 - > International-> iFirstDayOfWeek = 0)

有誰知道PowerShell中檢索它的Firstdayofweek可設置的?應該(/可以)我否則將其設置在腳本中?

我知道一個解決方法是使用.AddDays(1),但我正在尋找一個整潔的解決方案。

編輯: 好的。這是非常奇怪的,我收到了不同的「本週對不同年份的第一天..

2012 - 週六:

PS C:\Users\A730978F> get-date -date "2012-01-08" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-08 Sun Week: 2 
PS C:\Users\A730978F> get-date -date "2012-01-09" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-09 Mon Week: 2 
PS C:\Users\A730978F> get-date -date "2012-01-10" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-10 Tue Week: 2 
PS C:\Users\A730978F> get-date -date "2012-01-11" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-11 Wed Week: 2 
PS C:\Users\A730978F> get-date -date "2012-01-12" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-12 Thu Week: 2 
PS C:\Users\A730978F> get-date -date "2012-01-13" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-13 Fri Week: 2 
PS C:\Users\A730978F> get-date -date "2012-01-14" -uFormat "%Y-%m-%d %a Week: %V" 
2012-01-14 Sat Week: 3 

2013 - 週一:

PS C:\Users\A730978F> get-date -date "2013-01-06" -uFormat "%Y-%m-%d %a Week: %V" 
2013-01-06 Sun Week: 1 
PS C:\Users\A730978F> get-date -date "2013-01-07" -uFormat "%Y-%m-%d %a Week: %V" 
2013-01-07 Mon Week: 2 
PS C:\Users\A730978F> get-date -date "2013-01-08" -uFormat "%Y-%m-%d %a Week: %V" 
2013-01-08 Tue Week: 2 

2014 - 週二:

PS C:\Users\A730978F> get-date -date "2014-01-05" -uFormat "%Y-%m-%d %a Week: %V" 
2014-01-05 Sun Week: 1 
PS C:\Users\A730978F> get-date -date "2014-01-06" -uFormat "%Y-%m-%d %a Week: %V" 
2014-01-06 Mon Week: 1 
PS C:\Users\A730978F> get-date -date "2014-01-07" -uFormat "%Y-%m-%d %a Week: %V" 
2014-01-07 Tue Week: 2 

2015年 - 週三:

PS C:\Users\A730978F> get-date -date "2015-01-04" -uFormat "%Y-%m-%d %a Week: %V" 
2015-01-04 Sun Week: 1 
PS C:\Users\A730978F> get-date -date "2015-01-05" -uFormat "%Y-%m-%d %a Week: %V" 
2015-01-05 Mon Week: 1 
PS C:\Users\A730978F> get-date -date "2015-01-06" -uFormat "%Y-%m-%d %a Week: %V" 
2015-01-06 Tue Week: 1 
PS C:\Users\A730978F> get-date -date "2015-01-07" -uFormat "%Y-%m-%d %a Week: %V" 
2015-01-07 Wed Week: 2 

(請注意,我沒有嘗試過所有的周每年)

EDIT2:

再望過去的例子後,似乎週數是基於已經過去的'7天'的數量。我想它實際上並沒有使用任何「每週的第一天」設置。我想我必須做相應的計算。

感謝您的幫助!

+2

相關:http://stackoverflow.com/questions/15111557/using-powershell-how-do-you-get-the-weekday-number –

回答

0

顯然PowerShell的參數-uformat %V實際上並未使用任何一種「一週的第一天」的規則。它實際上只顯示了自年初以來(從1開始)經過的「7天」的數量。

使用這個信息,我做了如下功能檢索在一週每一天的同一個正確的週數(星期日至星期六):

(由於這兩個@DavidBrabant和@vonPryz爲我所需要的附加信息)

Function GetWeekOfYear($date) 
{ 
    # Note: first day of week is Sunday 
    $intDayOfWeek = (get-date -date $date).DayOfWeek.value__ 
    $daysToWednesday = (3 - $intDayOfWeek) 
    $wednesdayCurrentWeek = ((get-date -date $date)).AddDays($daysToWednesday) 

    # %V basically gets the amount of '7 days' that have passed this year (starting at 1) 
    $weekNumber = get-date -date $wednesdayCurrentWeek -uFormat %V 

    return $weekNumber 
} 

$weekNumber = GetWeekOfYear (get-date) 

(我使用的參數,這樣的功能是更靈活的/可測試)

這個功能基本上得到基於第n個星期三○週數並且將星期日作爲一週的第一天(我沒有花時間去改變,因爲這實際上是我公司使用的慣例)。

您可以說,它會根據第一週獲取週數,這一週至少有4天在今年,而第一天是星期天。

0

問題是由不同的全球化規則造成的。美國的週數與德國等不同。

,以獲得預期的周編號,你一定要拉一些字符串與全球化設置。另外一個SO question已經詳細討論了這個話題。

+1

感謝您的回答,第53周確實是一個不同的問題,我是有。然而,這個問題實際上是關於根據星期幾獲得正確的週數的問題(星期一至星期一之間的星期變化不是星期幾) – Deruijter

相關問題