我期待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) 我有最简单的任务,我无法弄清楚如何正确地做.通过下面的代码片段,我可以找到一个月的开头.
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月,对吗?
那我怎么能到达一个月的最后一秒呢?
我想从日期获取 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) 下面将创建一个NSDateComponents包含对象day和weekday而不是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了.这样的课程存在吗?
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:我在什么背景下编写了这段代码?这只是为了享受代码的乐趣。我试图编写令人困惑的代码结果,但我对这种试图变得聪明的尝试感到失望)
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"
我怎样才能获得月份和年份(整数)
如何添加/转发一天?(如果我们也是这个月的第一个!)
请你注意:-)
如何检查特定日期是否存在?例如,如果我执行以下操作:
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的检查后,如果组件同意我订的东西
我想比较两个日期之间的差异,但是使用下面的代码我收到错误"[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) 我正在使用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) 我只想要一个以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) nscalendar ×10
nsdate ×6
cocoa ×4
ios ×3
iphone ×3
swift ×3
arrays ×1
datetime ×1
ekevent ×1
objective-c ×1