2011-08-09 46 views
2

鉴于我有一个特定年份的星期编号,我如何得到该周开始的月份名称? (使用Obj-c)周数到月份

例如2009年的2周应转换为2009年1月 和51周2004年的应转换为2004年12月

回答

0
的问题

找到答案:get first day of given week

//convert week to month 
    int weekNum = sdi.mWeek; 
    const char *months[13]={"January","February","March","April","May","June","July","August","September","October","November","December","January"}; 
    struct tm curYear={0,0,0,1,0,sdi.mYear,0,0,0}; 
    time_t secsSinceEpoch=mktime(&curYear)+weekNum*86400*7; 
    struct tm *candidateDate=gmtime(&secsSinceEpoch);  
    if (candidateDate->tm_wday!=1) 
    { 
     secsSinceEpoch+=(86400*(candidateDate->tm_wday-1)); 
     candidateDate=gmtime(&secsSinceEpoch); 
    }  
    // [months[candidateDate->tm_mon]] returns month 
1

您可以使用最新的图书馆这样做,但如果想计算的话,这里是一个解释的解决方案

你需要知道这是不是一个闰年。每个月有4周加上几个月的时间取决于月份。

例如:

一月为4周加3天 ... 四月为4周加2天

商店天额外每个月(可以变化的只有一个是二月可能有28或29天,这取决于它是否是一个闰年)

$extra_days = (january => 3, march => 3, april => 2, december => 3); 

计算二月额外的天数(0或1),你必须计算出它是否是一个闰年...你可以使用如下操作来完成此操作 - >

$your_year mod 4 

类似:

if (($your_year - REFERENCE_LEAP_YEAR) mod 4 == 0) then "it's a leap year" 

现在你得到了额外的天,每个月就可以计算出一个月。每个月有4周,但你需要一个柜台来知道额外的日子是否满足一周。例如:

january = 3 extra days 
-> weeks = 4 - extra_days = 3 febraury = 1 extra day 
-> weeks = 8 - extra_days = 4 march = 3 extra days 
-> weeks 12 - extra_days = 7 
***now you have an extra week so.. 
-> weeks 13 - extra_days 

...