【问题标题】:Need assistance regarding NSDateFormatter需要有关 NSDateFormatter 的帮助
【发布时间】:2014-12-26 02:35:28
【问题描述】:

我只想要像“29-10-2014”这样没有时间的日期,所以我这样做了

NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"dd-MM-yyyy"];
NSString *sDate = [df stringFromDate:date];

如果我登录sDate,我会得到完美的结果。但我不想要NSString 我想要日期对象,在这里我所做的是

NSDate *theDate = [df dateFromString:sDate];

现在我收到2014-10-29 19:00:00 +0000 我只想要29-10-2014

【问题讨论】:

  • 你能告诉我你为什么想要这样的东西吗?当你想要 NSDate 的日期或时间时,你可以制作一个日期格式化程序并简单地使用它。
  • 有相关的帖子,例如:*.com/questions/3916392/…

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

这是因为-[NSDate description] 会返回完整格式的日期。

您可以调换 NSDate 的 - (NSString *)description{} 并返回您想要的东西。
请注意,这是一种非常糟糕的做法

#import <objc/runtime.h>

@implementation NSDate (CustomDescription)

+ (void)load
{
    swizzleInstance(@selector(description),
                    @selector(description_m),
                    [UIViewController class],
                    [self class]);
}

static void swizzleInstance(SEL originalSl, SEL swizzledSl, Class originalCl, Class swizzledCl) {
    Method originalMethod = class_getInstanceMethod(originalCl, originalSl);
    Method swizzledMethod = class_getInstanceMethod(swizzledCl, swizzledSl);
    method_exchangeImplementations(originalMethod, swizzledMethod);
}

- (NSString *)description_m
{
    NSDateFormatter *df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"dd-MM-yyyy"];
    return [df stringFromDate:self];
}
@end

【讨论】:

    【解决方案2】:

    这是你的解决方案

    你在 nsdate 中传递字符串 sdata,而不是像这样传递 nsdate 对象

         NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd-MM-yyyy"];
        NSDate *now = [[NSDate alloc] init];
    
        NSDate *last=[dateFormat stringFromDate:now];
        NSLog(@"last==%@",last);
    

    【讨论】:

    • 但他写的有问题我不想要字符串对象我想要 NSDate 的对象。
    【解决方案3】:

    您将需要使用 NSCalender 类来获取年、月和日期组件。 NSDate 类将始终以 GMT 表示。

    使用

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *date = [NSDate date];
    [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit) fromDate:date];
    

    也请查看这篇文章。使用属性从 NSDate 检索值 http://nshipster.com/nsdatecomponents/

    【讨论】:

      【解决方案4】:

      这是简单的代码

      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setDateFormat:@"dd-MM-yyyy"];
      NSString* reqDate = [dateFormatter stringFromDate:[[NSDate alloc] init]];
      NSLog(@"reqDate: %@",reqDate);//reqDate: 30-10-2014
      

      【讨论】:

      • 我也在做同样的事情,但我的日期对象来自数组,它不适合我:(.