Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 1577年以前的历法计算。。。(朱利安->;格里高利)_Iphone_Ios_Nscalendar - Fatal编程技术网

Iphone 1577年以前的历法计算。。。(朱利安->;格里高利)

Iphone 1577年以前的历法计算。。。(朱利安->;格里高利),iphone,ios,nscalendar,Iphone,Ios,Nscalendar,相同的代码 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"d MMMM yyyy GG"]; //13th of December 1577 NSDate * aDate = [NSDate dateWithTimeIntervalSince1970:-12371067248]; NSString * formattedDate = [dateFo

相同的代码

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"d MMMM yyyy GG"];
//13th of December 1577
NSDate * aDate = [NSDate dateWithTimeIntervalSince1970:-12371067248]; 

NSString * formattedDate = [dateFormatter stringFromDate:aDate];
Mac OS X目标正确显示格式化日期

1577年12月13日

iOS 5.0目标显示

1577年12月23日

好像朱利安->格里高利过渡被窃听了一样


有没有办法克服这个问题?

试着在Mac和iOS上运行这段代码

NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init];
localFormatter.timeStyle = NSDateFormatterNoStyle;
localFormatter.dateStyle = NSDateFormatterMediumStyle;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"g"];  // g = julian day number
NSDate *d2299159 = [dateFormatter dateFromString:@"2299159"];
NSDate *d2299160 = [dateFormatter dateFromString:@"2299160"];
NSDate *d2299161 = [dateFormatter dateFromString:@"2299161"];
NSDate *d2299162 = [dateFormatter dateFromString:@"2299162"];


NSLog(@"Julian Day Number 2299159 = %@", [localFormatter stringFromDate:d2299159]);
NSLog(@"Julian Day Number 2299160 = %@", [localFormatter stringFromDate:d2299160]);
NSLog(@"Julian Day Number 2299161 = %@", [localFormatter stringFromDate:d2299161]);
NSLog(@"Julian Day Number 2299162 = %@", [localFormatter stringFromDate:d2299162]);

你会得到这些输出(除了特殊情况,我想是吧。请记住,转换日期完全是任意的,格里高利直到大约300年后才被完全采用。好吧,它确实表明了实现是不同的,有一个显然是坏的。在我的例子中,我是在将日期序列化到SQLite时偶然发现它的……意识到转换问题是的,我认为保持一段时间比较安全。请以不一定是坏的,只是不同的方式提交错误报告。不,它真的坏了。如果我可以以任何一种方式配置它,情况会有所不同…这是一个很好的答案。非常感谢。我终于设法以稍微不同的方式解决了这个特定的问题,但这篇文章将有助于其他人解决这个问题毫无疑问,我会遇到它。我最终成功地发布了我的应用程序(无耻的插件)在不依赖NSDateFormatterAh的iOS实现的情况下,也许再加上一点——当我研究这个特定的问题时,我一开始非常确定我做了一些可怕的错误,阅读了所有我能找到的关于Julian->Gregorian transition的信息。我最终提交了一份雷达文件,声称iOS上有一个bug——我基本上认为med认为Mac实现是正确的,因为它遵循“采用”(这实际上是一个渐进的过程,在这里是向后的时间顺序)对于大多数欧洲大陆国家的格雷戈里,至少如果我相信维基百科的话。很高兴你能解决你的问题。我之所以发现这一点,是因为我在Mac上运行了一些单元测试,然后将它们转移到iOS上,突然一些测试失败了。苹果可以/应该对这些东西提供更多的信息。我非常同意。我我两次观看了WWDC的日历计算会议,希望它能给我一些线索。我认为这是过渡,但他们谈论它时好像iOS和OS X的实现是相同的。老实说,我仍然要运行测试,看看是NSCalendar、NSDate还是NSDateFormatter是罪魁祸首,但知道我在m中说了什么上面的答案暂时有效。不过,我怀疑它是NSCalendar。
Julian Day Number 2299159 = 1582-10-03   <-- Julian calendar
Julian Day Number 2299160 = 1582-10-04   <-- Julian calendar
Julian Day Number 2299161 = 1582-10-15   <-- Gregorian calendar
Julian Day Number 2299162 = 1582-10-16   <-- Gregorian calendar
Julian Day Number 2299159 = 1582-10-13   <-- Proleptic Gregorian calendar
Julian Day Number 2299160 = 1582-10-14   <-- Proleptic Gregorian calendar
Julian Day Number 2299161 = 1582-10-15   <-- Gregorian calendar
Julian Day Number 2299162 = 1582-10-16   <-- Gregorian calendar