标签: nscalendar

为什么NSCalendar的dateFromComponents返回错误的日期?

我期待2010-10-11 00:00:00

但相反,我收到2010-10-10 21:00:00 +0000

我知道,我可以添加几个小时并收到所需的日期,但我不明白为什么我前一天有21个小时......

请帮忙!

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:2010];
[comps setMonth:10];
[comps setDay:11];

[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *retDate = [cal dateFromComponents:comps];
Run Code Online (Sandbox Code Playgroud)

iphone nscalendar nsdatecomponents

5
推荐指数
1
解决办法
4803
查看次数

计算一个月的结束或最后一秒

我有最简单的任务,我无法弄清楚如何正确地做.通过下面的代码片段,我可以找到一个月的开头.

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *beginning = nil;
[cal rangeOfUnit:NSMonthCalendarUnit startDate:&beginning interval:NULL forDate:self];
return beginning;
Run Code Online (Sandbox Code Playgroud)

现在我想确定同一个月的结束(23:59:59的最后一秒适合我的目的).我的第一个想法是在下个月的第一天开始并减去一秒钟.但我无法将NSDateComponent实例中的日期分解为[dateComponents setMonth:[dateComponents month] + 1],因为在12月的情况下,该方法不会接受12 + 1 = 13来到1月,对吗?

那我怎么能到达一个月的最后一秒呢?

cocoa objective-c nsdate nscalendar nsdatecomponents

5
推荐指数
1
解决办法
2814
查看次数

NSDateFormatter:一年中的第几周和第一个工作日

我想从日期获取 NSString,日期格式如下:

MMEEEY ww
Run Code Online (Sandbox Code Playgroud)

问题出在“ww”,即一年中的第几周。我必须将此格式与从后台获取的另一种格式进行比较。但后台的第一个工作日是星期一,而 iOS 的第一个工作日是星期日。因此,当星期日时,字符串会不同,因为一年中的星期不同。

问题是: 如何强制 NSDateFormatter 使用星期一作为第一个工作日?

我尝试使用将firstWeekday属性设置为2的日历来设置NSDateFormatter的日历属性,但它不起作用。

其要点是:

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.firstWeekday = 2;
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.calendar = calendar;
Run Code Online (Sandbox Code Playgroud)

编辑:诺亚回答后的测试

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
dateFormatter.locale = locale;
dateFormatter.dateFormat = @"MMEEEY ww";

NSDate * date = [NSDate dateWithTimeIntervalSince1970:1330251642]; // next sunday

NSLog(@"%@ -> %@", date, [dateFormatter stringFromDate:date]);

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.firstWeekday = …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa nsdateformatter nscalendar

5
推荐指数
1
解决办法
2540
查看次数

NSCalendarUnit标志用于设置所有标志

下面将创建一个NSDateComponents包含对象dayweekday而不是hour:

var today = NSDate()
var gregorian = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var flags: NSCalendarUnit = .DayCalendarUnit | .WeekdayCalendarUnit
var components = gregorian.components(flags, fromDate: today)

// valid
components.day
components.weekday
// invalid
components.hour
Run Code Online (Sandbox Code Playgroud)

为了拥有hour,我必须|- .HourCalendarUnit就像这样:

flags = flags | .HourCalendarUnit
Run Code Online (Sandbox Code Playgroud)

是否有标志来指定所有标志?或者我只需要手动将|它们全部放入,如果我想要NSDateComponents全部拥有它们?

或者,理想情况下,我只想说today.hour不用就可以NSDateComponents了.这样的课程存在吗?

nsdate nscalendar nsdatecomponents swift

5
推荐指数
1
解决办法
5356
查看次数

为什么 Swift 的日期时间间隔忽略闰秒?

2012 年 6 月 30 日发生了闰秒。因此它持续了 86401 秒。然而,在下面的 Swift 代码中,timeInterval却是 86400。这是怎么回事呢?

let formatter = ISO8601DateFormatter()
let date = formatter.date(from: "2012-06-30T00:00:00Z")!
let dayAfter = formatter.date(from: "2012-07-01T00:00:00Z")!
let timeInterval = date.distance(to: dayAfter)
Run Code Online (Sandbox Code Playgroud)

(ps:我在什么背景下编写了这段代码?这只是为了享受代码的乐趣。我试图编写令人困惑的代码结果,但我对这种试图变得聪明的尝试感到失望)

datetime nscalendar swift

5
推荐指数
1
解决办法
134
查看次数

NSDate,NSCalendar和NSDateComponents计时

NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+2"]];

NSDateComponents *dateComponents = [calendar components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];    

NSInteger day = [dateComponents day];
NSInteger month = [dateComponents month];
NSInteger year = [dateComponents year];

 NSLog(@" %i %i %i ", day, month, year);
Run Code Online (Sandbox Code Playgroud)

该代码显示"12 2147483647 2147483647"

我怎样才能获得月份和年份(整数)

如何添加/转发一天?(如果我们也是这个月的第一个!)

请你注意:-)

iphone cocoa nsdate nscalendar nsdatecomponents

4
推荐指数
1
解决办法
8312
查看次数

如何检查特定日期是否存在?

如何检查特定日期是否存在?例如,如果我执行以下操作:

 NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear:2011];
[dateComponents setMonth:2];
[dateComponents setDay:29];

NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
[dateComponents release];

NSLog(@"date: %@", date);
Run Code Online (Sandbox Code Playgroud)

我将在3月1日到达.我无法找到一个可以让这一点,我能做到这一点的唯一方法,就是通过创建NSDate的检查后,如果组件同意我订的东西

cocoa nsdate nscalendar

4
推荐指数
1
解决办法
1943
查看次数

[NSCFString timeIntervalSinceReferenceDate]:发送到实例的无法识别的选择器

我想比较两个日期之间的差异,但是使用下面的代码我收到错误"[NSCFString timeIntervalSinceReferenceDate]:无法识别的选择器发送到实例." 代码有什么问题?

NSDate *dateAdded=[eventDictionary objectForKey:@"dateAdded"];
NSDate *validUntilDate=[eventDictionary objectForKey:@"validUntilDate"];
NSDateComponents *sometimeAgo = [[NSCalendar currentCalendar] components:(NSSecondCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:dateAdded  toDate:validUntilDate  options:0]; 
Run Code Online (Sandbox Code Playgroud)

nsdate nscalendar nstimeinterval ios

4
推荐指数
1
解决办法
8792
查看次数

响应EKEventEditViewController中的"取消"或"完成"

我正在使用EKEventEditViewController,我可以填充我需要的信息.我被授予访问日历和所有内容的权限.我的问题是当我点击"取消"没有任何反应.当我点击"完成"时,我收到错误消息,表示没有设置日历,没有设置日期,"事件不属于该事件存储".

我不认为我的didCompleteWithAction委托方法被调用.

我的viewController符合:

@interface EventoViewController : UIViewController <EKEventEditViewDelegate>
Run Code Online (Sandbox Code Playgroud)

当我尝试将self设置为delegate时,我收到错误:

sending EventoViewController *const__strong' to parameter of incompatible type 'id<UINavigationControllerDelegate>'
Run Code Online (Sandbox Code Playgroud)

原始代码.h

#import <UIKit/UIKit.h>
#import <EventKit/EventKit.h>
#import <EventKitUI/EventKitUI.h>

@interface EventoViewController : UIViewController <EKEventEditViewDelegate>

@property (weak, nonatomic) IBOutlet UILabel *eventDetailTitleLabel;
@property (weak, nonatomic) IBOutlet UILabel *eventDetailDateLabel;
@property (weak, nonatomic) IBOutlet UILabel *eventDetailDescriptionLabel;


- (IBAction)closeModalView:(id)sender;
- (IBAction)addEventToNative:(id)sender;


@end
Run Code Online (Sandbox Code Playgroud)

原来的.m

#import "EventoViewController.h"



@implementation EventoViewController

@synthesize eventDetailTitleLabel, eventDetailDateLabel, eventDetailDescriptionLabel;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    } …
Run Code Online (Sandbox Code Playgroud)

nscalendar ios ekevent

4
推荐指数
1
解决办法
3111
查看次数

如何在日期ios数组中获取所有星期日

我只想要一个以NSDate的形式包含一年中所有星期一的数组但是很快.我在目标-c中使用以下代码,但不知道如何在swift中使用它.

 NSDate *pickerDate = [NSDate date];
    NSLog(@"pickerDate: %@", pickerDate);

    NSDateComponents *dateComponents;
    NSCalendar *calendar = [NSCalendar currentCalendar];

    dateComponents = [calendar components:NSWeekdayCalendarUnit fromDate:pickerDate];
    NSInteger firstMondayOrdinal = 9 - [dateComponents weekday];
    dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setDay:firstMondayOrdinal];
    NSDate *firstMondayDate = [calendar dateByAddingComponents:dateComponents toDate:pickerDate options:0];

    dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setWeek:1];

    for (int i=0; i<64; i++) {
        [dateComponents setWeek:i];
        NSDate *mondayDate = [calendar dateByAddingComponents:dateComponents toDate:firstMondayDate options:0];
        NSLog(@"week#: %i, mondayDate: %@", i, mondayDate);
    }
Run Code Online (Sandbox Code Playgroud)

arrays nsdate nscalendar ios swift

4
推荐指数
1
解决办法
1368
查看次数