簡體   English   中英

如何知道給定的日期是哪個月的哪個星期?

[英]How to know the given date is which month's which week?

我有一個要求,如果我給出具體日期,例如:

  1. 輸入2016-02-01 ,應返回2016-2-1 ,表示2016-02-01屬於2016年 2 月的第一周。

  2. 輸入2016-09-01 ,應返回2016-8-5 ,表示2016-09-01屬於2016年 8 月的第五周。

  3. 如果2016-01-01不是星期一,則返回年份應為2015-xx

注意,那里的公式模式是從周一到周日是一個星期。 例如2016-04 , 2016-04-04 -> 2016-04-10是四月的第一周。 2016-04-01 -> 2016-04-03不屬於四月的周,它屬於三月。

我嘗試使用NSCalendar,但要求很特殊,我不知道如何處理,所以,有人可以為此提供一些思路嗎?
提前致謝。


我試過的代碼:

在我的 Util.m 中:

+ (NSString *)getCustomMonthAndWeek:(NSString *)formatDateStr {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];

    NSDate *date= [[NSDate alloc] init];
    date = [formatter dateFromString:formatDateStr];

    NSCalendar *calen = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *dateCom = [calen components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];

    NSString *ret_str = @"";

    ret_str = [[NSString alloc] initWithFormat:@"%ld-%ld-%@", (long)dateCom.year, (long)dateCom.month, dateCom.weekOfMonth];

    return ret_str;

}

在我的 VC 中:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *string = [Util getCustomMonthAndWeek:@"2016-04-02"];  // Here prints 2016-4-1, is not my requirement, you see my Attention.
    NSLog(@"%@", string);
}

使用 NSCalendar 設置為 NSDateComponents 你會發現給定的日期是哪個月的,星期。 使用以下代碼

 NSDate *date=[NSDate date];

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *dateComponents = [gregorianCalendar components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];

組件給出輸出日歷年:2017 月:2 閏月:無日:7 小時:14 分鍾:55 月中的一周:2

NSDate *someDate = // whatever
NSDate *now = [NSDate date];
NSDateComponents *thenComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:someDate];
NSDateComponents *nowComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:now];
if([thenComponents year] == [nowComponents year] && [thenComponents month] == [nowComponents month] && [thenComponents day] == [nowComponents day] && [thenComponents hour] == [nowComponents hour])

{}

如果您只想檢查日期,請刪除“小時”組件,或者同時刪除該組件和“天”(並替換為 NSWeekCalendarUnit 和 -week 方法)以檢查星期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM