将NSDate格式化为年,月,日以及时,分,秒的特定样式


132

我基本上需要分别获取当前日期和时间,格式为:

2009-04-26 
11:06:54

下面的代码来自同一主题的另一个问题,它生成

现在:| 2009-06-01 23:18:23 +0100 | 
dateString:| 2009年6月1日23:18 | 
解析:| 2009-06-01 23:18:00 +0100 |

这几乎是我想要的,但是我想将日期和时间分开。

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *now = [[NSDate alloc] init];

NSString *dateString = [format stringFromDate:now];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:dateString];

NSLog(@"\n"
"now:        |%@| \n"
"dateString: |%@| \n"
"parsed:     |%@|", now, dateString, parsed);

1
在这种情况下,您花时间写出最终用于解决问题的代码,我可能会将其(在本例中,edit2以下的所有内容)粘贴在答案中,而不是对帖子进行编辑。无论哪种方式都没什么大不了的,但是它使查找/查看这是解决问题的方法变得容易一些。
劳伦斯·约翰斯顿,2009年

Answers:


72

iPhone格式的字符串为Unicode格式。链接后面是一张表格,解释上述所有字母的含义,因此您可以构建自己的字母。

当然,使用完日期格式化程序后,请不要忘记释放它们。上面的代码泄漏formatnowinFormat


即使激活了ARC,它也会泄漏吗?
Dimme 2013年

19
上面在ARC下不会有任何泄漏(当然,在我们进行此讨论时,ARC在2009年不可用)。
罗布·纳皮尔2013年

194

这是我用的:

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

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];

NSLog(@"\n"
      "theDate: |%@| \n"
      "theTime: |%@| \n"
      , theDate, theTime);

[dateFormat release];
[timeFormat release];
[now release];

12

您可以使用此方法只是将您的日期传递给它

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"your current date format"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"your desired format"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    NSLog(@"%@", stringFromDate);
    return stringFromDate;
}

11
    NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
    [dateformat setDateFormat:@"Your Date Format"];

设置返回格式为...。

yyyy-MM-dd返回2015-12-17日期

yyyy-MMM-dd 返回2015-Dec-17日期

yy-MM-dd返回15-12-17日期

dd-MM-yy 返回17-12-15日期

dd-MM-yyyy 返回17-12-2015日期

yyyy-MMM-dd HH:mm:ss 返回2015-Dec-17 08:07:13日期和时间

yyyy-MMM-dd HH:mm 返回2015-Dec-17 08:07日期和时间

有关更多详细信息,请单击“数据和时间格式”。

谢谢.....


1
请提供附加说明以及代码示例。
Maciej Lach 2015年

我有这个日期'2018-06-08T07:30:05.391Z'我尝试过'yyyy-MM-dd'T'HH:mm:ss.000Z'但得到零值。
Pramod Tapaniya

4

没什么新东西,但仍然想分享我的方法:

+(NSString*) getDateStringFromSrcFormat:(NSString *) srcFormat destFormat:(NSString *)
destFormat scrString:(NSString *) srcString
{
    NSString *dateString = srcString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //[dateFormatter setDateFormat:@"MM-dd-yyyy"];
    [dateFormatter setDateFormat:srcFormat];
    NSDate *date = [dateFormatter dateFromString:dateString];

    // Convert date object into desired format
    //[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    [dateFormatter setDateFormat:destFormat];
    NSString *newDateString = [dateFormatter stringFromDate:date];
    return newDateString;
}

3

为了迅速

var dateString:String = "2014-05-20";
var dateFmt = NSDateFormatter()
// the format you want
dateFmt.dateFormat = "yyyy-MM-dd"
var date1:NSDate = dateFmt.dateFromString(dateString)!;

0

迅捷3

extension Date {
    
    func toString(template: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)
        return formatter.string(from: self)
    }
    
}

用法

let now = Date()
let nowStr0 = now.toString(template: "EEEEdMMM") // Tuesday, May 9
let nowStr1 = now.toString(template: "yyyy-MM-dd") // 2017-05-09
let nowStr2 = now.toString(template: "HH:mm:ss") // 17:47:09

玩模板以满足您的需求。示例和文档在这里可帮助您构建所需的模板。

注意

例如,DateFormatter如果您打算使用它,则可能要缓存TableView。为了让一个想法,循环超过1000日期拉着我0.5秒使用上述toString(template: String)功能,相对于0.05秒使用myFormatter.string(from: Date)


为了使该注释更强(因为它非常重要),您可以重构函数以使用带有新实例默认值的可选参数。我不知道你为什么被否决,所以我要赞成。
Vive

-6
NSDate *date         = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"]
NSString *dateString  = [df stringFromDate:date];
[df setDateFormat:@"hh:mm:ss"];
NSString *hoursString = [df stringFromDate:date];

就是这样,您拥有了所有想要的东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.