【发布时间】:2010-04-05 17:10:40
【问题描述】:
看起来很简单,但我似乎找不到方法。
很高兴看到几种不同的方法。
【问题讨论】:
标签: ios cocoa-touch nsdate nsdateformatter nscalendar
看起来很简单,但我似乎找不到方法。
很高兴看到几种不同的方法。
【问题讨论】:
标签: ios cocoa-touch nsdate nsdateformatter nscalendar
@Chuck 的回答是正确的,并引导我使用以下代码。想我会分享:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
【讨论】:
setHour、setMinute、setSecond等,粒度更细。
你可以用这个
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
希望对你有所帮助。
【讨论】:
如果您谈论的是特定日历日期而不是 UNIXy 日期,您可能需要 NSCalendar 的 dateFromComponents:。
【讨论】:
示例通常是最简单的学习方法。下面是几个例子。
这个是最简单的。
let currentDateTime = Date()
// 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)
// 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。
【讨论】:
请参阅NSDate 的文档。您可以使用NSDateFormatter 的dateFromString: 方法或NSCalendar 的dateFromComponents: 方法。
【讨论】:
init?
我在寻找这个问题的答案时发现了这个线程,但后来我在我的 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];
【讨论】:
这很荒谬,不是吗?
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 函数无法正常工作...
【讨论】: