为了显示构建日期,我使用了以下代码:
NSString *compileDate = [NSString stringWithUTF8String:__DATE__];
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"MMM d yyyy"];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[df setLocale:usLocale];
NSDate *date = [df dateFromString:compileDate];
[df setDateFormat:@"yyyy"];
self.backgroundColor = [UIColor clearColor];
self.textAlignment = NSTextAlignmentCenter;
self.text = [NSString stringWithFormat:@"© Copyright 2009-%@ Version %@ %@", [df stringFromDate:[NSDate date]], VERSION, date ];
今天是2014/03/15,它将返回2014/03/14
我的设备已在美国境内设置。我找不到什么错!
注意:编译时间始终为20:30:00 +00:00!
我该如何解决?
答案 0 :(得分:2)
只需设置
[df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
答案 1 :(得分:2)
虽然您的地区可能是美国,但您的时区是伊朗的时区,即UTC + 03:30。
您正在从仅包含day组件的字符串创建NSDate。因此,此日期的时间部分将设置为午夜。此外,日期将在您当地时间创建。所以现在是午夜,伊朗时间。
当您将description
发送到NSDate时(与使用%@格式说明符一样),返回的NSString将使用UTC时区(最后的+0000)格式化
午夜,或00:00:00伊朗时间,减去03:30:00的时区偏差,前一天是20:30:00。
您应该使用另一个NSDateFormatter格式化构建日期。
E.g:
NSDateFormatter *compileDayFormatter = [[NSDateFormatter alloc] init];
compileDayFormatter.dateStyle = NSDateFormatterShortStyle;
NSString *versionInfo = [NSString stringWithFormat:@"© Copyright 2009-%@ Version %@ %@", [df stringFromDate:[NSDate date]], VERSION, [compileDayFormatter stringFromDate:date]];
或者,如果您不关心语言环境感知日期,只需使用compileDate字符串。
答案 2 :(得分:1)
__DATE__
包含一个字符串,该字符串仅包含预处理器运行的日期,没有与之关联的时间信息。然后,您将直接在标签中将其记录下来,并且NSDate对象会在记录时报告其在GMT中的全部时间。您看到的偏移是因为您的时区与GMT之间的差异。
使用__TIME__
宏来获取正确的时间。
宏描述为here。
答案 3 :(得分:1)
我的解决方案是使用构建日期创建一个build.h标头(构建版本与构建日期相关),并使用我的应用程序显示应用程序版本+构建日期。
当然,每次构建应用程序时都需要刷新build.h。
所以,我就是这样做的:
选择您的目标(您可以在其中设置分发包ID ...)/构建阶段。转到菜单编辑器/添加构建阶段/添加运行脚本构建阶段。将新创建的行(运行脚本)移动到第34行;编译源" (使用拖放)。打开行"运行脚本",并替换Type a script ... with(请用反向引号替换所有`,因为我不知道如何将这个反向引用放在代码块中):
echo "#define BUILD_DATE @\"date "+%d/%m/%Y %H:%M"\"" > build.h
现在每次构建时,build.h都将重新创建。
所以,现在你需要构建=>您将在项目的根目录中获得第一个build.h。将其添加到您的项目中。
现在,在需要信息的VC中导入build.h。
以下是我如何使用它(我对标签有一个iboultet)
- (void)viewDidLoad
{
[super viewDidLoad];
//cf http://stackoverflow.com/questions/3015796/how-to-programmatically-display-version-of-target-in-iphone-app-xcode
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
self.version.text = [NSString stringWithFormat:@"v %@ %@", appVersionString,BUILD_DATE];
}