我有一個NSDate對象,需要一天的整數。即如果我們有2010年5月25日,int應該是25.是否有一個簡單的方法來做到這一點?如何從NSDate中獲取日組件?
回答
注意,一個NSDate只是一個時間戳,並只有當相對於被認爲是「天」給定的日曆和時區。如果你想在當前時區公曆,
NSTimeZone * tz = [NSTimeZone localTimeZone];
CFAbsoluteTime at = CFDateGetAbsoluteTime((CFDateRef)date);
int day = CFAbsoluteTimeGetGregorianDate(at, (CFTimeZoneRef)tz).day;
如果你想在UTC時間,設置tz = nil
。
此外,CFAbsoluteTime和NSDate(據我所知)基於POSIX時間,它指定了86400秒的一天,因此不處理閏秒。
關於如何從NSDate
獲取日曆組件,請考慮this post。本質上,它看起來像:
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* components = [calendar components:NSDayCalendarUnit
fromDate:myDate];
NSInteger day = [components day];
(不要忘記內存管理上面。)
這是做到這一點的方法。不創建日期格式化程序和其他瘋狂。 – 2012-12-28 23:02:14
這似乎是OP所要求的而非公認的答案。 – ohhh 2015-02-04 18:41:18
如果您只需要NSDate的「25」部分,您可以從dateFormatter中獲取它。
喜歡的東西:
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd"];
NSString *dayInMonthStr = [dateFormatter stringFromDate:today];
int dayInMonth = [dayInMonthStr intValue];
[dateFormatter release];
NSLog(@"Today is the %i. day of the month", dayInMonth);
使用 「EEEE」 作爲當天的全名格式。
使用「EEE」作爲當天短名稱的格式。
例子:
- (NSString *)getDayOfTheWeek:(NSDate *)date{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init] ;
[dateFormatter setDateFormat:@"EEEE"];
NSString *formattedDateString = [dateFormatter stringFromDate:date];
return formattedDateString;
}
我有這個問題而回,我創建了下面的方法來讓一切都更容易。
定義
#define DATE_TYPE_hhmmss [NSArray arrayWithObjects:@"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYY [NSArray arrayWithObjects:@"M", @"D", @"Y", nil]
#define DATE_TYPE_MMDDYYYYhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYYWWhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"W", @"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYYhhmmssWW [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", @"W", nil]
#define DATE_TYPE_YYYYMMDD [NSArray arrayWithObjects:@"Y", @"M", @"D", nil]
#define DATE_TYPE_YYYYMMDDhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", nil]
#define DATE_TYPE_YYYYMMDDWWhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"W", @"h", @"m", @"s", nil]
#define DATE_TYPE_YYYYMMDDhhmmssWW [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", @"W", nil]
#define DATE_TYPE_FRIENDLY [NSArray arrayWithObjects:@"xx", nil]
日期方法
創建日期從價值觀
-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year {
NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
[dateFormatter setDateFormat:@"MM"];
[dateComponents setMonth:month];
[dateFormatter setDateFormat:@"DD"];
[dateComponents setDay:day];
[dateFormatter setDateFormat:@"YYYY"];
[dateComponents setYear:year];
NSDate * result = [calendar dateFromComponents:dateComponents];
return result;
}
-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year hour:(int)hour minute:(int)minute {
NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]];
[dateFormatter setDateFormat:@"MM"];
[dateComponents setMonth:month];
[dateFormatter setDateFormat:@"DD"];
[dateComponents setDay:day];
[dateFormatter setDateFormat:@"YYYY"];
[dateComponents setYear:year];
[dateFormatter setDateFormat:@"HH"];
[dateComponents setHour:hour];
[dateFormatter setDateFormat:@"MM"];
[dateComponents setMinute:minute];
NSDate * result = [calendar dateFromComponents:dateComponents];
return result;
}
-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year hour:(int)hour minute:(int)minute second:(int)second {
NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]];
[dateFormatter setDateFormat:@"MM"];
[dateComponents setMonth:month];
[dateFormatter setDateFormat:@"DD"];
[dateComponents setDay:day];
[dateFormatter setDateFormat:@"YYYY"];
[dateComponents setYear:year];
[dateFormatter setDateFormat:@"HH"];
[dateComponents setHour:hour];
[dateFormatter setDateFormat:@"MM"];
[dateComponents setMinute:minute];
[dateFormatter setDateFormat:@"SS"];
[dateComponents setSecond:second];
NSDate * result = [calendar dateFromComponents:dateComponents];
return result;
}
獲取字符串從日期
-(NSString *) getStringFromDate:(NSDate *)date dateType:(NSArray *)dateType {
NSString * result = @"";
NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSString * format = @"";
NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate:date];
NSInteger year = [dateComponents year];
NSInteger month = [dateComponents month];
NSInteger day = [dateComponents day];
NSInteger weekday = [dateComponents weekday];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
if (dateType != nil) {
for (int x = 0; x < [dateType count]; x++) {
if (x == ([dateType count]-1)) {
if ([[dateType objectAtIndex:x] isEqualToString:@"Y"]) {
format = [format stringByAppendingFormat:@"%d", year];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"M"]) {
format = [format stringByAppendingFormat:@"%d", month];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"D"]) {
format = [format stringByAppendingFormat:@"%d", day];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"W"]) {
format = [format stringByAppendingFormat:@"%d", weekday];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"h"]) {
format = [format stringByAppendingFormat:@"%d", hour];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"m"]) {
format = [format stringByAppendingFormat:@"%d", minute];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"s"]) {
format = [format stringByAppendingFormat:@"%d", second];
}
} else {
if ([[dateType objectAtIndex:x] isEqualToString:@"Y"]) {
format = [format stringByAppendingFormat:@"%d|", year];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"M"]) {
format = [format stringByAppendingFormat:@"%d|", month];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"D"]) {
format = [format stringByAppendingFormat:@"%d|", day];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"W"]) {
format = [format stringByAppendingFormat:@"%d|", weekday];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"h"]) {
format = [format stringByAppendingFormat:@"%d|", hour];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"m"]) {
format = [format stringByAppendingFormat:@"%d|", minute];
} else if ([[dateType objectAtIndex:x] isEqualToString:@"s"]) {
format = [format stringByAppendingFormat:@"%d|", second];
}
}
if ([[dateType objectAtIndex:x] isEqualToString:@"xx"]) {
format = [NSString stringWithFormat:@"Year: %d, Month: %d, Day: %d, Weekday: %d, Hour: %d, Minute: %d, Second: %d", year, month, day, weekday, hour, minute, second];
}
}
} else {
format = [format stringByAppendingFormat:@"%d|", year];
format = [format stringByAppendingFormat:@"%d|", month];
format = [format stringByAppendingFormat:@"%d|", day];
format = [format stringByAppendingFormat:@"%d|", weekday];
format = [format stringByAppendingFormat:@"%d|", hour];
format = [format stringByAppendingFormat:@"%d|", minute];
format = [format stringByAppendingFormat:@"%d|", second];
format = [NSString stringWithFormat:@"%d|%d|%d|%d|%d|%d|%d", year, month, day, weekday, hour, minute, second];
}
result = format;
return result;
}
例
NSDate * date = [self getDateWithMonth:12 day:24 year:1994];
NSString * dateInString = [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY];
int month = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:0] intValue];
int day = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:1] intValue];
int year = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:2] intValue];
NSLog(@"String of Date: \"%@\"", dateInString);
NSLog(@"Month: %d", month);
NSLog(@"Day: %d", day);
NSLog(@"Year: %d", year);
[self getDateWithMonth:12 day:24 year:1994]
返回一個NSDate
對象通常是難以閱讀,因此,您可以使用[self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY]
得到的字符串的方法一個NSDate
對象。
使用定義(宏)來指定想要在字符串中獲取的日期的格式。
例如: DATE_TYPE_hhmmss
將返回Hour|Minute|Second
, DATE_TYPE_MMDDYYYY
將返回Month|Day|Year
, DATE_TYPE_MMDDYYYYhhmmss
將返回Month|Day|Year|Hour|Minute|Second
, DATE_TYPE_MMDDYYYYWWhhmmss
將返回Month|Day|Year|Weekday (#)|Hour|Minute|Second
等等...
控制檯日誌
2012-04-29 13:42:15.791 Atomic Class[1373:f803] String of Date: "12|24|1994"
2012-04-29 13:42:15.793 Atomic Class[1373:f803] Month: 12
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Day: 24
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Year: 1994
- 1. 從NSDate值獲取日期零件
- 2. 從NSDate獲取小時組件
- 3. 如何從NSDate中獲取日,月和小時
- 4. NSDate從NSString獲取錯誤的日期
- 5. 的NSDate從一個日期組件和從其他的NSDate
- 6. 從UIPickerView獲取NSDate
- 7. 如何從JavaScript中的p:日曆組件獲取日期值?
- 8. 如何從NSDate獲取當前日期,時間,年份?
- 9. Objective-C NSDate - 如何從不同時區獲取當前日期
- 10. 如何從NSDate對象獲取時間?
- 11. 從NSDate獲取NSDate隨時區調整
- 12. 如何根據當地時區獲取NSDate的小時組件?
- 13. 如何從UIImage獲得NSDATE?
- 14. 從NSDate獲取小時數
- 15. 從字符串獲取NSDate
- 16. 從NSDate獲取天數
- 17. 如何從listView中獲取組件?
- 18. sql server:如何獲取日期組件?
- 19. 如何從日曆中獲取日期?
- 20. 如何在Swift中分離NSDate()的日期和時間組件?
- 21. 無法從NSString中獲取NSDate
- 22. HH:MM am/pm無法從nsdate中獲取
- 23. iOS NSDate獲取timezone特定日期?
- 24. 使用UTC時間獲取[NSDate日期]
- 25. 如何獲取ANTD日曆組件中的選定日期?
- 26. 如何在[NSDate日期]當天00:00獲得NSDate?
- 27. 如何從.jar文件獲取日誌?
- 28. 如何從文件名獲取日期
- 29. 如何使用NSDate獲取下一個日期?
- 30. 如何獲取自NSDate參考日期以來的天數?
最佳答案將針對當前時區。 – Dmitry 2013-04-19 11:58:36
@Altaveron這不一定是真的。例如,在單元測試中,您希望指定明確的時區而不是訪問全局狀態。 – 2013-04-22 18:31:32