Ios 如何以-[Today 10:01:20]、[08-jan-17 11:20:51]等格式获取日期和时间?
我正在开发聊天应用程序,我想以特定格式发送日期/时间,比如今天、昨天和日期。如何按照此格式显示Ios 如何以-[Today 10:01:20]、[08-jan-17 11:20:51]等格式获取日期和时间?,ios,nsdate,datetime-format,Ios,Nsdate,Datetime Format,我正在开发聊天应用程序,我想以特定格式发送日期/时间,比如今天、昨天和日期。如何按照此格式显示 - (NSString *)relativeDateStringForDate:(NSDate *)date { NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitWeekOfYear | NSCalendarUnitMonth | NSCalendarUnitYear
- (NSString *)relativeDateStringForDate:(NSDate *)date
{
NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitWeekOfYear |
NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *components = [[NSCalendar currentCalendar] components:units
fromDate:date
toDate:[NSDate date]
options:0];
if (components.year > 0) {
return [NSString stringWithFormat:@"%ld years ago", (long)components.year];
} else if (components.month > 0) {
return [NSString stringWithFormat:@"%ld months ago", (long)components.month];
} else if (components.weekOfYear > 0) {
return [NSString stringWithFormat:@"%ld weeks ago", (long)components.weekOfYear];
} else if (components.day > 0) {
if (components.day > 1) {
return [NSString stringWithFormat:@"%ld days ago", (long)components.day];
} else {
return @"Yesterday";
}
} else
{
return @"Today";
}
}
我使用上面的函数来获取日期,但我想要组合字符串中的日期时间。那么如何将日期/时间组合到上述方法中呢?是否可以向此方法发送日期时间字符串?要以
[08-jan-17 11:20:51]
格式获取日期,可以使用以下代码
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// Convert to new Date Format
[dateFormatter setDateFormat:@"dd-MMM-yy HH:mm:ss"];
NSDate *date = [NSDate date];
NSString *newDate = [dateFormatter stringFromDate:date]
NSLog(@"[%@]",newDate); // this will give you the date in format [08-jan-17 11:20:51]
// Convert to new Time Format
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDate *date = [NSDate date];
NSString *newTime = [dateFormatter stringFromDate:date];
NSLog(@"%@",newTime); // this will give you the time in format 10:01:20
要以[10:01:20]
格式获取时间,可以使用以下代码
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// Convert to new Date Format
[dateFormatter setDateFormat:@"dd-MMM-yy HH:mm:ss"];
NSDate *date = [NSDate date];
NSString *newDate = [dateFormatter stringFromDate:date]
NSLog(@"[%@]",newDate); // this will give you the date in format [08-jan-17 11:20:51]
// Convert to new Time Format
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDate *date = [NSDate date];
NSString *newTime = [dateFormatter stringFromDate:date];
NSLog(@"%@",newTime); // this will give you the time in format 10:01:20
所以你可以像这样使用你的代码-
- (NSString *)relativeDateStringForDate:(NSDate *)date
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// Convert to new Date Format
[dateFormatter setDateFormat:@"dd-MMM-yy HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date];
NSLog(@"[%@]",newDate);
// Convert to new Time Format
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSString *newTime = [dateFormatter stringFromDate:date];
NSLog(@"%@",newTime);
NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitWeekOfYear |
NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *components = [[NSCalendar currentCalendar] components:units
fromDate:date
toDate:[NSDate date]
options:0];
if (components.year > 0) {
return [NSString stringWithFormat:@"[%ld years ago], [%@]", (long)components.year, newDate];
} else if (components.month > 0) {
return [NSString stringWithFormat:@"[%ld months ago], [%@]", (long)components.month, newDate];
} else if (components.weekOfYear > 0) {
return [NSString stringWithFormat:@"[%ld weeks ago], [%@]", (long)components.weekOfYear, newDate];
} else if (components.day > 0) {
if (components.day > 1) {
return [NSString stringWithFormat:@"[%ld days ago], [%@]", (long)components.day, newDate];
} else {
return [NSString stringWithFormat:@"[Yesterday %@]",newTime];
}
} else
{
return [NSString stringWithFormat:@"[Today %@]", newTime];
}
}
以下是几点观察:
NSCalendarUnitWeekOfMonth
,而不是NSCalendarUnitWeekOfYear
NSDate
对象之间的日期组件。您应该首先获取两个日期的日期组件(而不是时间组件),然后获取这两组日期组件之间的差异
事实上,如果是上午9点,而你看到的是昨晚11点的一条消息,它会计算出这一天
- (NSString *)relativeDateStringForDate:(NSDate *)date {
NSCalendarUnit units = NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour | NSCalendarUnitDay | NSCalendarUnitWeekOfMonth | NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.allowedUnits = units;
formatter.maximumUnitCount = 2;
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
return [NSString stringWithFormat:@"%@ %@", [formatter stringFromDate:date toDate:[NSDate date]], NSLocalizedString(@"ago", @"x days _ago_")];
}