try 在iOS6中运行此功能(尚未测试iOS6之前的版本):

NSDateFormatter *julianDayDateFormatter = nil;
julianDayDateFormatter = [[NSDateFormatter alloc] init];
[julianDayDateFormatter setDateFormat:@"g"];

for (NSString *timeZone in [NSTimeZone knownTimeZoneNames]) {
    julianDayDateFormatter.timeZone = [NSTimeZone timeZoneWithName: timeZone];
    NSDate *date = [julianDayDateFormatter dateFromString:[NSString stringWithFormat:@"%d", 2475213]];
    if (date == nil)
        NSLog(@"timeZone = %@", timeZone);
}

您将获得以下输出:

America/Bahia
America/Campo_Grande
America/Cuiaba
America/Sao_Paulo

有人能解释为什么NSDateFormatter设置为julian day数字时这四个时区的行为是这样的吗?所有其他时区使NSDateFormatter返回实际的NSDate.

推荐答案

我有suspicion英镑.只是一种怀疑,但这是一种相当强烈的怀疑.

该值代表2064年10月19日.巴西时区实行夏时制starting at local midnight——也就是说,他们的时钟会向前走,所以午夜本身并不存在.10月19日就是这种转变之一.

下面是一些使用野田佳彦时间的示例代码.净日期/时间API.它会判断它知道的每个时区的一天的开始是否真的是午夜:

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        var localDate = new LocalDate(2064, 10, 19);
        var provider = DateTimeZoneProviders.Tzdb;
        foreach (var id in provider.Ids)
        {
            var zone = provider[id];
            var startOfDay = zone.AtStartOfDay(localDate).LocalDateTime.TimeOfDay;
            if (startOfDay != LocalTime.Midnight)
            {
                Console.WriteLine(id);
            }
        }
    }
}

这就产生了一个非常相似的列表:

America/Bahia
America/Campo_Grande
America/Cuiaba
America/Sao_Paulo
Brazil/East

我怀疑巴西/东部可能是美国/圣保罗的别名,这就是为什么它不在你的名单上.

无论如何,回到你的朱利安日问题上——我怀疑格式化程序总是想在当地午夜返回一个NSDate *.这并不代表2064年10月19日在那些时区...因此它返回零.我个人建议它应该返回凌晨1点的值,但是嘿...

Objective-c相关问答推荐

覆盖@property setter 和无限循环

iOS8:退出应用程序后不久出现蓝条正在使用您的位置

如何在情节提要中为视图控制器提供标识符?

如何使用 NSFileManager 删除目录及其内容

Objective-C 静态、外部、公共变量

如何检测 iPhone 5c 的 colored颜色 ?

在从 UIViewController 调用的非保留完成中引用 self 时,weakSelf/strongSelf 舞蹈真的有必要吗?

禁用手势识别器

如何向 UILabel 添加滚动功能

如何在 iOS SDK 中使用语音识别?

使用 NSMutableArray 的二维数组

从我在 iPhone 上的应用程序调用官方 *Settings* 应用程序

Objective-C - 何时使用touch

获取包含在 NSString 中的文件的扩展名

如何将 nil 添加到 nsmutablearray?

如何将 NSOperationQueue 与 NSURLSession 一起使用?

发送通知到山狮通知中心

分组的 UITableView 在底部有 20px 的额外填充

如何让 UITextView 检测网站、邮件和电话号码的链接

围绕其中心旋转 UIView 保持其大小