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]];