【问题标题】:How to create NSDate like '2013-05-11 00:00:00' [duplicate]如何创建像'2013-05-11 00:00:00'这样的NSDate [重复]
【发布时间】:2013-05-08 22:37:39
【问题描述】:

我想这是一个非常基本的问题,但我似乎在我的任何书中都找不到答案。

假设我有一个日期,像这样创建:

NSDate *today = [NSDate date];

但我想将“今天”的时间部分更改为“00:00:00”。我该怎么做?

----已添加----

我试过了:

    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:11];
    [components setMonth:5]; 
    [components setYear:2013];
    [components setHour:0];
    [components setMinute:0];
    [components setSecond:0];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *startDate = [calendar dateFromComponents:components];
    NSLog(@"Current date: %@", startDate);

但是 NSLog 会打印出来:

Current date: 2013-05-11 04:00:00 +0000

我猜这与我的纽约时区有关?

-- 答案--

这里是任何正在寻找它的人的答案。从时间中消除04:00:00 的技巧是将时区设置为GMT:

[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

-- 修改后的答案--

但您实际上可能需要本地时间——例如,如果您需要按日期在核心数据中查找记录,并且存储的日期是本地时间——因此您可能不想将时区设置为 GMT ,毕竟。

【问题讨论】:

标签: ios


【解决方案1】:

如果你想设置一个日期的组件,你想看看NSCalendar处理日期组件的方法:

NSDate *today = [NSDate date];

// Get the year, month, day from the date
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:today];

// Set the hour, minute, second to be zero
components.hour = 0;
components.minute = 0;
components.second = 0;

// Create the date
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:components];

【讨论】:

  • 已编辑原始问题以回应此答案...
  • 好的,所以这回答了我的问题,虽然我花了一段时间才弄清楚 1) 为什么时间会像“04:00:00”一样出现,即使在将小时组件设置为0和2)为什么这是一件好事。我需要这个日期来进行核心数据查询,并且认为我需要一个 00:00:00 的时间,但是由于数据库中的时间是本地时间,而不是 GMT,我确实需要一个可以这么说,时区调整的午夜。我不明白为什么这个问题会产生如此多的负面影响......这确实不是一个之前提出的问题并没有真正解决的基本问题。无论如何,谢谢!
  • 没问题 - 很高兴它有帮助。
【解决方案2】:

我认为您正在寻找的是 NSDateComponents。来自docs

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];

使用setHour: 代替setDay: 等。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2021-07-10
    • 2021-04-09
    相关资源
    最近更新 更多