【问题标题】:how to convert system date to date with yyyy-MM-dd date format如何使用 yyyy-MM-dd 日期格式将系统日期转换为日期
【发布时间】:2014-05-10 06:41:20
【问题描述】:

我想将我的系统日期转换为 yyyy-MM-dd 日期格式并分配给另一个日期 我的代码是:

NSDate *datenow = [NSDate date];

NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd"];
currDate = [df stringFromDate:datenow];

NSLog(@"currDate ====%@",currDate);

[df setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df setDateFormat:@"yyyy-MM-dd"];

NSDate *compareDate = [df dateFromString:currDate];

NSLog(@"compareDate ====%@",compareDate);

NSLog 像这样打印 当前日期 ====2014-05-10 比较日期 ====2014-05-10 00:00:00 +0000

我想在比较日期中删除 00:00:00 +0000。怎么做。 请帮帮我,这正在消磨我的时间。

【问题讨论】:

  • “我想在比较日期删除 00:00:00 +0000。” - 这没有任何意义。 NSDate 只是一个绝对时间点(自 2001 年 1 月 1 日 GMT 起存储为秒)。 NSDate 对小时、分钟或时区一无所知。您在“compareDate ====2014-05-10 00:00:00 +0000”中看到的是日期对象的description。描述始终以 GTM 打印。
  • ...我的意思是格林威治标准时间。 - 也许你可以描述一下你真正需要实现的目标。
  • 每当你NSLog NSDate 对象时,它总是以yyyy-MM-dd HH:mm:ss +0000 格式在格林威治标准时间显示它。每当您想以特定格式查看它时(例如,只是 yyyy-MM-dd,那么您不应该 NSLog NSDate 对象,而应该只是使用 NSDateFormatter 检索到的字符串表示形式)。

标签: ios objective-c nsdate


【解决方案1】:

你可以使用

NSCalendar *currentCalendar = [NSCalendar currentCalendar];

// Getting components of the current date. NSDateComponents *currentDateComponents = [currentCalendar components:NSCalendarCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSTimeZoneCalendarUnit fromDate:[NSDate date]];

现在你的日期的组成部分(你可以传递任何日期而不是 [NSDate date] 当然)你可以使用你想要的每一个,或者你可以进一步使用:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"YYYY-MM-DD"];

格式化您的日期。

【讨论】:

    【解决方案2】:

    你说:

    我想在比较日期删除00:00:00 +0000。我该怎么做。

    简而言之,如果您不想在 UTC 字符串 yyyy-MM-dd HH:mm:ss +0000 中看到日期,那么不要在 NSLog 中查看 NSDate 对象本身。只有NSLog 从NSDateFormatter 中提取的字符串。


    但是,您的示例代码暗示了对 NSDate 和 NSDateFormatter 对象的目的和功能的误解。

    • NSDate 代表一个时间点,例如格林威治标准时间晚上 8 点,即巴黎中部时间晚上 10 点或纽约东部时间下午 4 点。但是NSDate 不包含时区,因为格林威治标准时间晚上 8 点、CEST 晚上 10 点和 EDT 下午 4 点都代表相同的时间点。

    • NSDateFormatter 可用于转换该 NSDate 对象的字符串表示形式(例如,格林威治标准时间晚上 8 点,巴黎的用户看到“晚上 10 点”,而纽约的用户看到“下午 4 点”)。

    但是使用日期格式化程序将日期转换为字符串是没有意义的(默认情况下,该字符串将在本地时区中),然后将该字符串转换回日期(这次是说该字符串表示 UTC 中的日期/时间,而实际上不是)。

    这相当于我在美国东部时间下午 4 点站在纽约时代广场的一个法国人旁边,告诉他“现在是格林威治标准时间下午 4 点”,他只会认为我是一个太无知的疯狂美国人知道现在是格林威治标准时间晚上 8 点(或者,根据他的手表,巴黎中部标准时间晚上 10 点)。

    所以,也许您可​​以退后一步,告诉我们您要做什么,因为您问题中的代码没有意义。如果您使用特定时区使用日期格式化程序将日期转换为字符串,那么如果要将其转换回日期,则必须使用相同的时区。 (或者您必须使用明确说明时区的日期格式;这就是NSLog 使用yyyy-MM-dd HH:mm:ss +0000 格式的原因,以便明确NSDate 代表的时间点。)

    【讨论】:

      【解决方案3】:
              NSDateFormatter *formater = [[NSDateFormatter alloc] init];
              [formater setLocale:[NSLocale systemLocale]];
              [formater setDateFormat:@"yyyy-MM-dd"];
              NSString *todayString = [formater stringFromDate:[NSDate date]];
              NSLog(@"todayString ====%@", todayString);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 2017-06-24
        • 1970-01-01
        • 2012-12-11
        相关资源
        最近更新 更多