-1

我是目标 c 的新手。我希望执行以下操作:将 24 小时格式转换为 12 小时,然后将 +2 添加到小时并显示为:下午 4:00 我得到 12 小时格式,但在添加 +2 后,时间始终显示为“am”,即即使是下午 4 点,它也会显示为凌晨 4 点。下面是我的代码:

NSDate *now = [NSDate date];
NSDateFormatter *timeFormatter=[[NSDateFormatter alloc]init];
timeFormatter.dateFormat=@"hh:00 a";
NSString  *currentHour=[timeFormatter stringFromDate:now ];
lblcurrentHour.text=[NSString stringWithFormat:@"%@",currentHour];
NSLog(@"%@",currentHour);

int hour=[[timeFormatter stringFromDate:now]intValue];

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
dateFormatter1.dateFormat = @"HH:mm";
NSDate *date1 = [dateFormatter1 dateFromString:[NSString stringWithFormat:@"%02d:00",hour+=3]];

dateFormatter1.dateFormat = @"hh:mm a";
lblnextHour.text = [dateFormatter1 stringFromDate:date1]; // prints 4:00 am not pm

我该如何解决这个问题?我哪里错了?

4

2 回答 2

2

如果我正确理解您的要求,您希望采用当前时间并将分钟显示为:00,锚定到当前小时。然后你想增加两个小时并显示那个时间。以下代码将 04:00 AM 和 06:00 AM 打印到控制台(当地时间为 0421。)

对于日历计算,NSDateFormatter当您计算两个小时后的时间时,我会避免使用您正在做的事情。有太多的方法可能会误入歧途。例如,当现在时间是 2300 时会发生什么?

可可中日历计算的一个很好的参考是here

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //  use gregorian calendar for calendrical calculations
        NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

        //  get current date
        NSDate *date = [NSDate date];
        NSCalendarUnit units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
        units |= NSHourCalendarUnit | NSMinuteCalendarUnit;
        NSDateComponents *currentComponents = [gregorian components:units fromDate:date];

        //  change the minutes to 0
        currentComponents.minute = 0;
        date = [gregorian dateFromComponents:currentComponents];

        //  format and display the time
        NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
        timeFormatter.dateFormat = @"hh:mm a";
        NSString *currentTimeString = [timeFormatter stringFromDate:date];
        NSLog(@"Current hour = %@",currentTimeString);

        //  add two hours
        NSDateComponents *incrementalComponents = [[NSDateComponents alloc] init];
        incrementalComponents.hour = 2;
        NSDate *twoHoursLater = [gregorian dateByAddingComponents:incrementalComponents toDate:date options:0];

        //  format and display new time
        NSString *twoHoursLaterStr = [timeFormatter stringFromDate:twoHoursLater];
        NSLog(@"Two hours later = %@",twoHoursLaterStr);
    }
    return 0;
}
于 2013-08-22T09:19:22.027 回答
1

试试这个:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss a"];
NSLog(@"Today's Date and Time: %@", [formatter stringFromDate:[NSDate date]]);

输出:

今天的日期和时间:02:43:33 PM

于 2013-08-22T09:14:40.117 回答