NSDateComponents将UTC日期转换为本地时区,弄乱了“ today” nsdate比较

米罗

我正在尝试使用NSDateComponents来测试动态日期是否发生在“今天”。我用它来提取年/月/日,然后比较两个NSDate的值。从理论上讲,这应该起作用。我在东海岸,所以EST,UTC的时间是-5。

当前实际时间:美国东部标准时间12:40:53

这是UTC中正确的NSDate。时间是正确的UTC:

  • 当前[NSD发布日期]:2016-01-19 17:40:53 +0000
  • 活动NSD发布日期:2016-01-19 00:00:00 +0000

这是我的日志,显示每个日期。它将日期转换为本地时区2016-01-19 07:00:00。由于当前日期是一天中的某一天,因此-5小时的偏移不会导致它偏移日期。然而,午夜时分又回到了一天。我如何才能尊重UTC?

NSLog:

2016-1-19 12:40:53 (America/New_York (EST) offset -18000), 
2016-1-18 19:0:0 (America/New_York (EST) offset -18000)

代码:

NSDateComponents *current = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond |NSCalendarUnitTimeZone fromDate:_date];
NSDateComponents *activity = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond |NSCalendarUnitTimeZone fromDate:activityModel.date];

// attempt to set timezones to UTC manually, doesn't change anything   
activity.calendar = [NSCalendar currentCalendar];
activity.calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];

current.calendar = [NSCalendar currentCalendar];
current.calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];


NSLog(@"%ld-%ld-%ld %ld:%ld:%ld (%@), %ld-%ld-%ld %ld:%ld:%ld (%@)", (long)[current year],(long)[current month], (long)[current day], (long)[current hour], (long)[current minute], (long)[current second], [current timeZone].description, (long)[activity year], (long)[activity month], (long)[activity day],(long)[activity hour], (long)[activity minute], (long)[activity second],[current timeZone].description);

if([current day] == [activity day] &&
           [current month] == [activity month] &&
           [current year] == [activity year] &&
           [current era] == [activity era]) {

           // do something if activity on current day
}

您正在更改的时区NSDateComponents但是您想在调用components(或调用NSCalendar日期检查例程)之前更改日历的时区,例如:

NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

if ([calendar isDate:_date inSameDayAsDate:activityModel.date]) {
    NSLog(@"same");
} else {
    NSLog(@"diff");
}

但是,如果当地时间是2016-01-19 21:00:00 -0500(例如UTC 20),该怎么办您是否要说示例中的活动日期也是同一天?如果是这样,那么您实际上是想将本地日历用于_date,将UTC用于activityModel.date,例如:

NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *current = [calendar components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond |NSCalendarUnitTimeZone fromDate:_date];

calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

NSDateComponents *activity = [calendar components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond |NSCalendarUnitTimeZone fromDate:activityModel.date];

if ([current day] == [activity day] && [current month] == [activity month] && [current year] == [activity year] && [current era] == [activity era]) {
    NSLog(@"same");
} else {
    NSLog(@"diff");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将UTC日期格式转换为本地nsdate

来自分类Dev

将NSDateComponents转换为NSDate

来自分类Dev

将UTC NSDate转换为本地NSDate不起作用

来自分类Dev

比较服务器中的nsdate和本地的nsdate

来自分类Dev

NSDate:将UTC值转换为军事时区值

来自分类Dev

使用偏移量比较将 UTC 时间转换为本地日期时间的 XSL

来自分类Dev

比较两个NSDate的月份和日期

来自分类Dev

Rails API与NSDate-比较日期时的精度问题

来自分类Dev

比较NSDate和从互联网下载的日期

来自分类Dev

使用UTC-5时区格式化程序将NSString转换为NSDate

来自分类Dev

为什么在UTC时区中比较两个NSDate总是失败?

来自分类Dev

为什么在UTC时区中比较两个NSDate总是失败?

来自分类Dev

当我们将 NSDate 转换为 NSDate 组件时,NSDateComponents 的值是错误的

来自分类Dev

Android将UTC日期转换为本地时区

来自分类Dev

Android将UTC日期转换为本地时区

来自分类Dev

Java:将UTC中的日期转换为本地时区

来自分类Dev

将MySQL日期转换为NSDate

来自分类Dev

将MySQL日期转换为NSDate

来自分类Dev

将本地NSDate时间与PST时间运行时间进行比较

来自分类Dev

UTC日期转换为本地时区

来自分类Dev

Swift:无法将类型“ NSDate”的值转换为预期的参数类型“ NSDateComponents”

来自分类Dev

Swift:无法将类型“ NSDate”的值转换为预期的参数类型“ NSDateComponents”

来自分类Dev

将UTC字符串转换为NSDate

来自分类Dev

如何将datetime.date.today()转换为UTC时间?

来自分类Dev

比较NSDate +期间

来自分类Dev

NSDate比较失败

来自分类Dev

快速比较NSDate

来自分类Dev

将UTC日期时间转换为带有时区的本地日期时间

来自分类Dev

将日期字符串表示为 UTC 日期并将其转换为本地时区

Related 相关文章

热门标签

归档