Bro*_*olf 11 iphone algorithm datetime objective-c
我想写一个模糊日期方法来计算iPhone的Objective-C中的日期.这里有一个流行的解释:
但它包含缺少的参数.怎么能在Objective-C中使用它?谢谢.
const int SECOND = 1;
const int MINUTE = 60 * SECOND;
const int HOUR = 60 * MINUTE;
const int DAY = 24 * HOUR;
const int MONTH = 30 * DAY;
if (delta < 1 * MINUTE)
{
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
}
if (delta < 2 * MINUTE)
{
return "a minute ago";
}
if (delta < 45 * MINUTE)
{
return ts.Minutes + " minutes ago";
}
if (delta < 90 * MINUTE)
{
return "an hour ago";
}
if (delta < 24 * HOUR)
{
return ts.Hours + " hours ago";
}
if (delta < 48 * HOUR)
{
return "yesterday";
}
if (delta < 30 * DAY)
{
return ts.Days + " days ago";
}
if (delta < 12 * MONTH)
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "one month ago" : months + " months ago";
}
else
{
int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "one year ago" : years + " years ago";
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ski 23
使用NSDate
该类在Cocoa中表示日期.有一种方便的方法NSDate
可以获得两个日期实例之间的增量,以秒为单位timeIntervalSinceDate:
.这是在一个NSDate
实例上调用的,将另一个NSDate
对象作为参数.它返回一个NSTimeInterval
(这是double的typedef),它代表两个日期之间的秒数.
鉴于此,将上面给出的代码调整为Objective-C/Cocoa上下文会相当简单.由于计算的delta NSDate
以秒为单位给出,给定两个日期,您可以轻松调整上面的代码:
//Constants
#define SECOND 1
#define MINUTE (60 * SECOND)
#define HOUR (60 * MINUTE)
#define DAY (24 * HOUR)
#define MONTH (30 * DAY)
- (NSString*)timeIntervalWithStartDate:(NSDate*)d1 withEndDate:(NSDate*)d2
{
//Calculate the delta in seconds between the two dates
NSTimeInterval delta = [d2 timeIntervalSinceDate:d1];
if (delta < 1 * MINUTE)
{
return delta == 1 ? @"one second ago" : [NSString stringWithFormat:@"%d seconds ago", (int)delta];
}
if (delta < 2 * MINUTE)
{
return @"a minute ago";
}
if (delta < 45 * MINUTE)
{
int minutes = floor((double)delta/MINUTE);
return [NSString stringWithFormat:@"%d minutes ago", minutes];
}
if (delta < 90 * MINUTE)
{
return @"an hour ago";
}
if (delta < 24 * HOUR)
{
int hours = floor((double)delta/HOUR);
return [NSString stringWithFormat:@"%d hours ago", hours];
}
if (delta < 48 * HOUR)
{
return @"yesterday";
}
if (delta < 30 * DAY)
{
int days = floor((double)delta/DAY);
return [NSString stringWithFormat:@"%d days ago", days];
}
if (delta < 12 * MONTH)
{
int months = floor((double)delta/MONTH);
return months <= 1 ? @"one month ago" : [NSString stringWithFormat:@"%d months ago", months];
}
else
{
int years = floor((double)delta/MONTH/12.0);
return years <= 1 ? @"one year ago" : [NSString stringWithFormat:@"%d years ago", years];
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用它,将start和end NSDate
对象作为参数传递,并返回一个NSString
时间间隔.
归档时间: |
|
查看次数: |
4352 次 |
最近记录: |