在Objective-C中以自定义格式获取当前时间的字符串

59
我希望在一个字符串中以以下格式获取当前时间:
dd-mm-yyyy HH:MM
如何实现?
4个回答

145

您需要一个日期格式化程序。以下是一个示例:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm"];

NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];

除非你想保留它;否则内存管理可能与问题有关。 - Carl Norum
6
日期格式化程序设置起来非常慢。如果您正在设置表格单元格中的日期或经常这样做,就像之前提到的那样,您会想要保留它并在所有需要时使用它,然后在dealloc中释放它。 - Steve Weller
1
@Moshe,你有尝试阅读文档吗?a是用于AM/PM时间段的格式字符串。http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns - Carl Norum
@CarlNorum 是的,我试过了。单个“a”是不行的。如果我无法让它工作,我会很快发布一个问题。编辑:我的错,我是个傻瓜。 - Moshe

15

可以像Carl所说的那样使用NSDateFormatter,或者只需使用老式的strftime,这也是完全有效的Objective-C代码:

#import <time.h>
time_t currentTime = time(NULL);
struct tm timeStruct;
localtime_r(&currentTime, &timeStruct);
char buffer[20];
strftime(buffer, 20, "%d-%m-%Y %H:%M", &timeStruct);

请注意,在 Objective C 中,您不能对 C 字符串做太多事情。当将某些内容记录到控制台时,这可能更加方便。您只需说 NSLog(@“%s”,缓冲区) 即可。 - Donovan Voss
4
在Objective-C中,你可以像在C语言中一样处理C字符串。也就是说,几乎所有的操作都可以实现。可以自由地使用C字符串和NSString,并根据当前的用例选择适当的字符串类型。我个人会选择Carl的解决方案,但重要的是要知道这并不是唯一的方法。 - Stephen Canon
我认为不使用strftime的原因(尽管它生成一个C字符串,然后您必须进行转换)是您还会失去NSDateFormatter日期格式选项的更大灵活性,包括数字结果的更多可变长度等。 - Kendall Helmstetter Gelner
这应该是iOS上的首选方式,因为存在这个bug https://dev59.com/eHVC5IYBdhLWcg3w7V33 ,但是我发现time()或localtime_r()并不总是准确的,我看到了非常奇怪的结果。 - valexa

9
这里有一个简单的解决方案:
- (NSString *)stringWithDate:(NSDate *)date
{
  return [NSDateFormatter localizedStringFromDate:date
                                        dateStyle:NSDateFormatterMediumStyle
                                        timeStyle:NSDateFormatterNoStyle];
}

改变 dateStyletimeStyle 以适应您的格式要求。


你不应该在某个地方创建日期吗?你没有传递它。 - Randy
很好的发现,@Randy,刚刚更新了函数以将“date”对象作为参数传递。 - Zorayr

3
也许这样更易读:
    NSDateFormatter *date = [[NSDateFormatter alloc] init];
    [date setDateFormat:@"HH:mm"];
    NSString *dateString = [date stringFromDate:[NSDate date]];
    [self.time setText:dateString];

首先,我们在obj-c中创建一个内置的NSDateFormatter,名称为date,然后通过[[NSDateFormatter alloc] init]应用它。之后,我们告诉代码处理器我们希望我们的日期具有小时/分钟/秒。最后,我们应该将我们的日期转换为字符串以便使用警报或设置标签值,为此,我们应该使用NSString方法创建一个字符串,然后使用[date stringFromDate:[NSDate date]]。享受它吧。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接