iPhone OS:如何为特定日期创建NSDate?

时间:2010-04-05 17:10:40

标签: ios cocoa-touch nsdate nsdateformatter nscalendar

似乎是一件简单的事情,但我似乎无法找到办法。

看到几种不同的方法会很棒。

7 个答案:

答案 0 :(得分:203)

@ Chuck的回答是正确的,并引导我转到以下代码。以为我会分享:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];

答案 1 :(得分:18)

您可以使用此

NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];

希望这会帮助你。

答案 2 :(得分:16)

如果您正在讨论特定的日历日期而不是UNIX日期,那么您可能需要NSCalendar的dateFromComponents:

答案 3 :(得分:9)

Swift示例

示例通常是最简单的学习方法。以下是一些例子。

现在

这是最简单的。

let currentDateTime = Date()

2017年2月20日

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20

// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)

1976年4月1日

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1

// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)

需要更多详情......?

还有其他方法可以创建日期。如果您想学习这些内容,以及如何显示日期,那么see my fuller answer

答案 4 :(得分:8)

请参阅NSDate的文档。您可以使用NSDateFormatter的{​​{3}}方法或NSCalendar的{​​{3}}方法。

答案 5 :(得分:3)

我在寻找这个问题的答案时找到了这个帖子,但后来我在一本我的Big Nerd Ranch Objective-C编程书中找到了一个很好的例子。相信他们,而不是我。

  NSDateComponents *myBDay  =[[NSDateComponents alloc] init];
    [myBDay setDay:22];
    [myBDay setMonth: 04];
    [myBDay setYear: 1984];
    [myBDay setHour:9];
    [myBDay setMinute:25];
    [myBDay setSecond:35];

    NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDate *dateOfBirth = [g dateFromComponents:myBDay];

答案 6 :(得分:2)

这太荒谬了,不是吗?

2013年中期,Apple 尚未提供设置NSDate值的简单方法。

在我目前的iPad项目中,我无法相信我不得不停止一段时间的生产力来编写自己的帮助类来从NSDate获取Year值。我的意思是,来吧,这是基本的东西。

无论如何,这是我在项目中使用的帮助器类,将字符串转换为NSDate值:

@implementation DateHelper

+(NSDate*)parseDateString:(NSString *)dateString
{
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
    [rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];

    NSDate *theDate = nil;
    NSError *error = nil;
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
        NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
    }

    return theDate;
}

@end

使用此代码,您可以使用以下内容设置NSDate值:

NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];

注意:此函数基于从此处获取的代码: https://stackoverflow.com/a/3968411/391605

我的解决方案使用以下代码,但我发现有时,它只是不会解析,并会返回 nil

//  Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
//  THIS DOESN'T WORK !  DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate* date = [formatter dateFromString:dateString];

我记得它在“2012年10月12日”失败了......这就是为什么我放弃并使用上面显示的更复杂的“parseDateString”函数。

我的观点是......小心。

一些非常基本的NSDate函数无法正常工作......