gpt4 book ai didi

iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法

转载 作者:IT王子 更新时间:2023-10-29 08:13:12 24 4
gpt4 key购买 nike

我正在寻找正确的方法来获取给定地点/时区的实际日期和时间,并能够将其与同一地点的给定日期/时间进行比较。

例如,假设巴黎是 GMT +1。就像我们现在一样,由于夏令时,巴黎也可以是 GMT+2,但据我所知这是异常(exception)的一部分,因此必须将其考虑到答案中,但不能将其作为一般参数。这里的重点词是“给定位置”。

因此,如果我想知道悉尼澳大利亚或法国巴黎的日期和时间,并将该日期放入 NSDate 以便能够将其与另一个 NSDate 进行比较,另一个 NSDate 代表同一日期/时间地方,我该怎么办?

我已经阅读了一页又一页的带有评论的问题和答案,甚至是接受的答案,来自有经验的用户说:不是一个好的答案 -1,错误,不是正确的方法,绝对错误,.. .

那么,你知道正确的做法吗?

在一个完美的世界中,即使用户的手机不在正确的时间和/或日期和/或时区,或者任何可以接近完美而无需连接的任何东西,该日期/时间也是绝对的日期/时间服务器。

最佳答案

I'm searching the correct way to get the actual date and time for a given place / timezone.

[NSDate date]返回一个表示当前日期和时间的日期对象,无论您在哪里NSDate 不受地点或时区的限制。只有一个 NSDate 代表现在 或与此相关的任何其他时刻,而不是每个时区的不同日期对象。因此,您不应尝试在时区之间转换日期。

NSDate 对象表示一个绝对 时间。考虑以下示例,两个日期 表示 在不同时区(9/9/11 3:54 PM 在巴黎和 9/9/11 11): 54 PM in Sydney)实际上是相同的日期。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Paris"]];
NSDate *aDate = [formatter dateFromString:@"9/9/11 3:54 PM"];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]];
NSDate *anotherDate = [formatter dateFromString:@"9/9/11 11:54 PM"];
NSLog(@"%@",anotherDate);
if ([aDate isEqualToDate:anotherDate]) {
NSLog(@"How about that?");
}

它记录了最后一条消息,因为巴黎的 9/9/11 3:54 PM 和悉尼的 9/9/11 11:54 PM 实际上是相同的即时。当巴黎是 9/9/11 3:54 PM 时,悉尼是 9/9/11 11:54 PM

both gives in the debugger and NSLog 2011-09-09 14:26:02, but it's now 16:26 so I guess it should return 16:26:02 +0200

在输出日期时,请记住 NSDatedescription 方法返回 GMT 时间,您需要使用 NSDateFormatter 从一个日期创建一个表示巴黎、悉尼等地本地时间的日期字符串:

NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]];
NSLog(@"%@",[formatter stringFromDate:now]); //--> 9/9/11 11:54 PM
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Paris"]];
NSLog(@"%@",[formatter stringFromDate:now]); //--> 9/9/11 3:54 PM

ok, but if I want to know if that time is after 15:00, how may I test that ?

创建一个代表今天 15:00(本地时间)的 NSDate 对象,并将其与“现在”进行比较:

NSDate *now = [NSDate date];
NSCalendar* myCalendar = [NSCalendar currentCalendar];
NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:[NSDate date]];
[components setHour: 15];
[components setMinute: 0];
[components setSecond: 0];
NSDate *todayAt15 = [myCalendar dateFromComponents:components];
if ([now compare:todayAt15] == NSOrderedDescending) {
NSLog(@"After 15:00 local time");
}

事实证明,@Oliver 需要检查是否在巴黎 15:00 之后,因此他需要创建一个代表今天巴黎时间 15:00(不是本地时间)的日期。有关如何执行此操作的示例,请参阅@Oliver 的回答。需要说明的是,我的第三段代码展示了如何检查它是否在本地时间 15:00 之后。

关于iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7362199/

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