Ios 编译日期(日期)返回昨天日期
为了显示构建日期,我使用了以下代码:Ios 编译日期(日期)返回昨天日期,ios,xcode,Ios,Xcode,为了显示构建日期,我使用了以下代码: NSString *compileDate = [NSString stringWithUTF8String:__DATE__]; NSDateFormatter *df = [[NSDateFormatter alloc]init]; [df setDateFormat:@"MMM d yyyy"]; NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifie
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
我怎样才能修好它 刚刚好
[df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
\uuuuu DATE\uuuu
包含一个字符串,该字符串仅显示预处理器运行的日期,没有与之关联的时间信息。然后,您将直接在标签中注销它,并且NSDate对象在登录时以GMT报告其全部时间。你看到的偏移是因为你的时区和格林尼治标准时间之间的差异
使用\uuuu TIME\uuu
宏获取正确的时间
描述了宏 我的解决方案是创建一个带有生成日期的build.h标题(生成版本与生成日期相关),并从我的应用程序中使用它来显示应用程序版本+生成日期 当然,build.h需要在每次构建应用程序时刷新 所以,我是这样做的: 选择目标(您可以在其中设置Bundle ID…)/构建阶段。转到菜单编辑器/添加构建阶段/添加运行脚本构建阶段。将新创建的行(运行脚本)上移到“编译源代码”行(使用拖放)。打开行“运行脚本”,并替换键入脚本。。。替换为(请全部替换) 通过反向引号“因为我不知道如何将此反向引号放入代码块中): 现在,每次构建时,build.h都将被重新创建 所以,现在您需要build=>您将在项目的根目录下使用第一个build.h。将其添加到您的项目中 现在,在VC中导入build.h,您需要这些信息 下面是我如何使用它(我有一个iBoulet标签)
虽然您的地区可能是美国,但您的时区是伊朗的时区,即UTC+03:30 您正在从仅包含day组件的字符串创建NSDate。因此,该日期的时间部分将设置为午夜。此外,日期将在当地时间创建。现在是午夜,伊朗时间 当您向NSDate发送
说明
时(就像您使用%@格式说明符一样),返回的NSString将使用UTC时区(末尾的+0000)进行格式化
午夜,或伊朗时间00:00:00减去时区偏移03:30:00是前一天的20:30:00
您应该使用另一个NSDateFormatter来格式化生成日期
例如:
或者,如果您不想知道区域设置日期,只需使用compileDate字符串即可 感谢您的详细描述,您的理由完全正确,但您的解决方案在NSDate对象中返回nil。请不要更改您已有的日期格式化程序。创建一个新的日期转换为字符串抱歉!你的解决方案是好的!谢谢,我做了,效果很好。实际上所有的答案都是有用的,可以接受的
echo "#define BUILD_DATE @\"date "+%d/%m/%Y %H:%M"\"" > build.h
- (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];
}
NSDateFormatter *compileDayFormatter = [[NSDateFormatter alloc] init];
compileDayFormatter.dateStyle = NSDateFormatterShortStyle;
NSString *versionInfo = [NSString stringWithFormat:@"© Copyright 2009-%@ Version %@ %@", [df stringFromDate:[NSDate date]], VERSION, [compileDayFormatter stringFromDate:date]];