将NSDate转换为NSString

4th*_*ace 251 objective-c nsdate nsstring swift

如何转换,NSDateNSString使得只有一年@"YYYY"格式输出到字符串?

小智 464

怎么样...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

//unless ARC is active
[formatter release];
Run Code Online (Sandbox Code Playgroud)

Swift 4.2:

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}
Run Code Online (Sandbox Code Playgroud)

  • 这将产生内存泄漏,因为格式化程序永远不会被释放. (24认同)
  • 不要在`NSDateFormatter`中使用`init`.据(http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixADeprecatedAPI.html%23//apple_ref/occ/instm [iOS的3.2之后去除]/NSDateFormatter/INIT).(如果你使用类方法,它会自动释放,你也不会有泄漏问题.) (6认同)
  • 永远不要忘记END的[格式化程序发布]! (4认同)
  • @zekel我不确定文档曾经说过什么,但现在它在多个地方建议`init`. (4认同)
  • 真的建议在下面查看localizedStringFromDate (3认同)
  • 我会自动释放它(3年前) (2认同)

Ode*_*Dov 283

我不知道我们都错过了这个:localizedStringFromDate:dateStyle:timeStyle:

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                      dateStyle:NSDateFormatterShortStyle 
                                                      timeStyle:NSDateFormatterFullStyle];
NSLog(@"%@",dateString);
Run Code Online (Sandbox Code Playgroud)

输出'13/06/12 00:22:39 GMT + 03:00'

  • 比设置格式化器好多了! (13认同)

Al *_*ual 86

希望通过提供包括年,月,日在内的常规格式化程序来增加更多价值.您可以使用此格式化程序超过一年

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 
Run Code Online (Sandbox Code Playgroud)

希望这有助于更多人

干杯Al


Nik*_*rns 24

NSDate网上有很多帮手,我倾向于使用:

https://github.com/billymeltdown/nsdate-helper/

自述文件摘要如下:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];
Run Code Online (Sandbox Code Playgroud)

这会产生以下类型的输出:

‘3:42 AM’ – if the date is after midnight today
‘Tuesday’ – if the date is within the last seven days
‘Mar 1’ – if the date is within the current calendar year
‘Mar 1, 2008’ – else ;-)
Run Code Online (Sandbox Code Playgroud)


Dav*_*ick 13

在Swift中:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy"
var dateString = formatter.stringFromDate(YourNSDateInstanceHERE)
Run Code Online (Sandbox Code Playgroud)


S R*_*yak 8

  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);
Run Code Online (Sandbox Code Playgroud)


pix*_*x0r 5

如果你没有NSDate -descriptionWithCalendarFormat:timeZone:locale:可用的(我不相信 iPhone/Cocoa Touch 包含这个),你可能需要使用 strftime 和 Monkey 以及一些 C 风格的字符串。NSDate您可以从using获取 UNIX 时间戳NSDate -timeIntervalSince1970


Gan*_*ank 5

+(NSString*)date2str:(NSDate*)myNSDateInstance onlyDate:(BOOL)onlyDate{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if (onlyDate) {
        [formatter setDateFormat:@"yyyy-MM-dd"];
    }else{
        [formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    }

    //Optionally for time zone conversions
    //   [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

    NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];
    return stringFromDate;
}

+(NSDate*)str2date:(NSString*)dateStr{
    if ([dateStr isKindOfClass:[NSDate class]]) {
        return (NSDate*)dateStr;
    }

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateStr];
    return date;
}
Run Code Online (Sandbox Code Playgroud)


Naz*_*zlo 5

只需添加这个扩展:

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}
Run Code Online (Sandbox Code Playgroud)