2012-07-05 47 views
6

使用NodaTime庫,如何根據週數和Week WeekYear計算一週中第一天的LocalDate。Week and WeekYear的LocalDate

這樣做的相反:

var date = new LocalDate(2012, 1, 1); 
int weekYear = date.WeekYear;  // 2011 
int weekNr = date.WeekOfWeekYear; // 52 

事情是這樣的假碼:

var newDate = LocalDate.FirstDayFromWeek(weekYear, weekNr); 
+0

你檢查這http://stackoverflow.com/questions/7130948/joda-time-most-recent-week-and-月? – V4Vendetta 2012-07-05 10:55:11

+1

@ V4Vendetta:這就是喬達時間,這對於如何構建日期來說更加矛盾。野田時間大多是年/月/日爲中心。這並不是說這是不可能的:) – 2012-07-05 10:56:02

回答

8

首先,你應該看如何構建相關LocalDate - 這就是你在邏輯上有信息如果你有WeekYearWeekOfWeekYear。如果你真的想要的話,你可以從LocalDate得到一個LocalDateTime,AtMidnight,但是我會堅持LocalDate,直到你真的需要其他任何東西,這樣你就可以合成更少的信息。

我不認爲我們現在做這個特別簡單,說實話 - 雖然底層引擎支持足夠的計算,我們可以添加它相當容易。

沒有任何變化的API,我建議你大概會是最好關閉的東西,如:所需一年內

  • 構建6月1日,它應該具有相同的WeekYear(我假設您正在使用的ISO日曆...)
  • 獲取到一週的第一天(date = date.Previous(IsoDayOfWeek.Monday)
  • 工作走出目前的週數
  • 加上或減去周權數

因此,像:

public static LocalDate LocalDateFromWeekYearAndWeek(int weekYear, 
    int weekOfWeekYear) 
{ 
    LocalDate midYear = new LocalDate(weekYear, 6, 1); 
    LocalDate startOfWeek = midYear.Previous(IsoDayOfWeek.Monday); 
    return startOfWeek.PlusWeeks(weekOfWeekYear - startOfWeek.WeekOfWeekYear); 
} 

並不十分愉快的或有效的,但不能太 ...如果你發現自己想要做了很多工作,與WeekOfWeekYearWeekYear,請提出功能要求對於你想要做的事情。

編輯:只是作爲一個更新,我們現在支持這一點:

LocalDate date = LocalDate.FromWeekYearWeekAndDay(year, week, IsoDayOfWeek.Monday); 
+0

謝謝!也許我會創建一個功能請求。注意:爲了方便我的代碼,我有一個struct:struct Week {int Year; int WeekNr; }' – 2012-07-05 11:14:16