Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Ios 与x27之间的差异;YYYY';和';yyyy';在NSDateFormatter中_Ios_Objective C_Nsdate_Nsdateformatter - Fatal编程技术网

Ios 与x27之间的差异;YYYY';和';yyyy';在NSDateFormatter中

Ios 与x27之间的差异;YYYY';和';yyyy';在NSDateFormatter中,ios,objective-c,nsdate,nsdateformatter,Ios,Objective C,Nsdate,Nsdateformatter,“YYYY”和“YYYY”之间的确切区别是什么。我在报纸上读到,上面说 一个常见的错误是使用YYYY。yyyy指定日历年 鉴于YYYY指定了ISO中使用的年份(“一年中的一周”) 年-周日历。在大多数情况下,yyyy和yyyy产生相同的结果 数字,但它们可能不同。通常,您应该使用 历年 但是当我尝试使用 NSString *stringDate = @"Feb 28, 2013 05:30pm"; NSDateFormatter *dateFormatter = [[NSDateFormatte

“YYYY”和“YYYY”之间的确切区别是什么。我在报纸上读到,上面说

一个常见的错误是使用YYYY。yyyy指定日历年 鉴于YYYY指定了ISO中使用的年份(“一年中的一周”) 年-周日历。在大多数情况下,yyyy和yyyy产生相同的结果 数字,但它们可能不同。通常,您应该使用 历年

但是当我尝试使用

NSString *stringDate = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy hh:mma"];
NSDate *date=[dateFormatter dateFromString:stringDate];
NSLog(@"Date 1 : %@",date); //2013-02-28 12:00:00 +0000

NSString *stringDatee = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatterr = [[NSDateFormatter alloc] init];
[dateFormatterr setDateFormat:@"MMM dd, YYYY hh:mma"];
NSDate *datee=[dateFormatterr dateFromString:stringDatee];
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString); //Jan 05, 2013 05:30PM
在这里,日期和日期的结果不同,我理解,但为什么日期2和日期3的结果不同呢?当我从字符串创建日期并再次将其反转为字符串时,输出是否不匹配

有人知道同样的原因吗?。虽然它指定了一年中的一周,但我仍然会得到相同的结果

谢谢

编辑:-

如果我编码

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormatterr stringFromDate:[NSDate date]];
NSLog(@"date: %@", dateString); //Feb 28, 2013 04:37PM

如果结果显示正确的结果,但与我作为字符串传递给日期的结果相同,我得到的日期
2013-01-05 12:00:00+0000
,请检查NSLog的日期2,奇怪的结果,为什么?

使用正确格式的日期格式字符串时也很重要

@“YYYY”是基于周的日历年

@“yyyy”是普通日历年

你可以浏览整个博客,看一看很好

(死链接)

一个常见的错误是使用 YYYY。yyyy指定日历年,而yyyy指定年份 (指“一年中的一周”),用于ISO年-周日历。大多数 案例yyyy和yyyy产生相同的数字,但它们可能是相同的 不一样。通常,您应该使用日历年


从中,区分
yyyy
yyy
的所有答案都是另一个问题的正确答案。这个问题本身指的是另一件事

为什么这两个值不同?(摘自问题)

这里@p.J的答案是,它们在价值上并没有真正的不同。当您记录NSDate(即日期2)时,您将获得恰好位于UTC时区的对象的完整描述。记录日期3时不会出现此逻辑,因为它已转换为字符串并应用于您的时区

打印日期3的方式与打印日期2的方式相同。您应该为日期3指定UTC时区。大概是这样的:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString); 
希望这有帮助


tl;时区博士

谢谢你的回答,你查过我的日期2和日期3的NSLog了吗?为什么它们不同?我传递的是同样的格式,同样的东西。我希望这是因为你正在将一个日期对象转换为字符串,这就是为什么它会给出两个不同的结果。每当你将一个日期转换为字符串时,它都会向你显示相同的结果,你可以查看我正在使用的博客字符串->日期,然后使用相同的格式设置日期->字符串,所以,理想的情况是,我应该再次返回我之前通过的相同日期,但事实并非如此。。为什么?链接断了。对不起,我的错。一年有52周。此值应返回日期所在的年份的哪一周。这将有助于计算财务项目或经常性日历事件。我同意此标识符容易混淆,而且选择不当。它必须存在的原因有很多:datee是一个NSLog对象。当与字符串连接时,它将返回自身的字符串表示形式。这意味着您在将datee传递给NSLog()时依赖于NSDate的默认格式。如果您使用dateWithString创建NSDate对象,您可能会看到不同之处。您应该观看名为“Session 117-Performing Calendar Calculations”的WWDC 2011视频,59:11142.2 MB(高清)“从《星际迷航》中了解虚拟现实?不。我指的是基于日历的计算——什么都不是。如果你还没有看过这段视频,请观看,如果你喜欢这样的东西,那会很有趣。@DigiMonk谢谢,我会看的。。主要是,YYYY有时工作,而YYYY一直工作。如果你看一下,就会明白为什么。date2和date3之间的差异与年份格式无关,完全是因为NSDate
description
方法总是以这种方式显示(在UTC中)——没有“格式”(或时区)在NSDate中。您能详细描述您的答案吗?请参见周历十二月一日和周一日期。
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000
NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString);