gpt4 book ai didi

ios - 如何在 iOS 中获取 "days ago, hours ago"时间格式?

转载 作者:行者123 更新时间:2023-12-01 17:29:42 24 4
gpt4 key购买 nike

我想在 iOS 中获得几小时前、几天前的时间/日期格式。但我得到了错误的数据。例如,如果时间是:

2015-10-21 03:43:20

然后根据下面的代码它在 6 小时前显示给我。我在 php 中使用 Now() 函数来保存时间/日期,那么如何显示不同国家/地区的确切时间?
+(NSString*)HourCalculation:(NSString*)PostDate
{
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormat setTimeZone:gmt];
NSDate *ExpDate = [dateFormat dateFromString:PostDate];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSDayCalendarUnit|NSWeekCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit|NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:ExpDate toDate:[NSDate date] options:0];
NSString *time;
if(components.year!=0)
{
if(components.year==1)
{
time=[NSString stringWithFormat:@"%ld year",(long)components.year];
}
else
{
time=[NSString stringWithFormat:@"%ld years",(long)components.year];
}
}
else if(components.month!=0)
{
if(components.month==1)
{
time=[NSString stringWithFormat:@"%ld month",(long)components.month];
}
else
{
time=[NSString stringWithFormat:@"%ld months",(long)components.month];
}
}
else if(components.week!=0)
{
if(components.week==1)
{
time=[NSString stringWithFormat:@"%ld week",(long)components.week];
}
else
{
time=[NSString stringWithFormat:@"%ld weeks",(long)components.week];
}
}
else if(components.day!=0)
{
if(components.day==1)
{
time=[NSString stringWithFormat:@"%ld day",(long)components.day];
}
else
{
time=[NSString stringWithFormat:@"%ld days",(long)components.day];
}
}
else if(components.hour!=0)
{
if(components.hour==1)
{
time=[NSString stringWithFormat:@"%ld hour",(long)components.hour];
}
else
{
time=[NSString stringWithFormat:@"%ld hours",(long)components.hour];
}
}
else if(components.minute!=0)
{
if(components.minute==1)
{
time=[NSString stringWithFormat:@"%ld min",(long)components.minute];
}
else
{
time=[NSString stringWithFormat:@"%ld mins",(long)components.minute];
}
}
else if(components.second>=0)
{
if(components.second==0)
{
time=[NSString stringWithFormat:@"1 sec"];
}
else
{
time=[NSString stringWithFormat:@"%ld secs",(long)components.second];
}
}
return [NSString stringWithFormat:@"%@ ago",time];
}

最佳答案

几点观察:

  • 首先,如果使用 NSDateComponentsFormatter,可以大大简化这段代码。 ,例如
    NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
    formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
    formatter.allowedUnits = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    NSString *elapsed = [formatter stringFromDate:someDate toDate:[NSDate date]];

    这会生成一个字符串,表示两个 NSDate 之间的时间。对象,像这样:

    5 years, 9 months, 20 days, 3 hours, 48 minutes, 56 seconds



    或者您可以指定最大单位数,它只会显示最大的 n 个。例如:
    formatter.maximumUnitCount = 2;

    这将产生:

    5 years, 10 months

  • 注意常量的使用,例如 NSCalendarUnitYear不是 NSYearCalendarUnit .
  • 如果耗时关闭,最常见的情况是时间字符串中的时区不正确。避免此类问题的最简单方法是确保您从服务器收到的字符串位于已知时区(例如 GMT)或时间字符串包含时区。通常我们会在 Web 服务中使用 ISO 8601/RFC 3339 日期格式并相应地调整我们的日期格式化程序(参见 Apple Technical Q&A 1480,其中讨论了一些微妙的问题)。
  • 关于ios - 如何在 iOS 中获取 "days ago, hours ago"时间格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33256992/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com