34

我想得到日期,NSDate不需要时间。例子:

NSDate* today = [NSDate date];  // want to give 20-06-2012 only

我想在不显示时间的情况下获取今天的日期并将其用于NSDate变量或字符串变量中。

4

4 回答 4

47

以防其他人寻找这个。我使用了以下内容:

NSDateComponents *components = [[NSCalendar currentCalendar] 
             components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
              fromDate:[NSDate date]];
NSDate *startDate = [[NSCalendar currentCalendar] 
             dateFromComponents:components];
于 2013-07-13T15:15:32.517 回答
9

在性能方面,这种方法可能比使用NSDateFormatterNSCalendar更好。

斯威夫特 3, 4, 5

let timeInterval = floor(Date().timeIntervalSinceReferenceDate / 86400) * 86400
let newDate = Date(timeIntervalSinceReferenceDate: timeInterval)

斯威夫特 2

let timeInterval = floor(NSDate().timeIntervalSinceReferenceDate / 86400) * 86400
let newDate = NSDate(timeIntervalSinceReferenceDate: timeInterval)

您还可以考虑时区(此功能是 NSDate 扩展的一部分):

斯威夫特 3, 4, 5

extension Date {

    func dateWithoutTime() -> Date {
        let timeZone = TimeZone.current
        let timeIntervalWithTimeZone = self.timeIntervalSinceReferenceDate + Double(timeZone.secondsFromGMT())
        let timeInterval = floor(timeIntervalWithTimeZone / 86400) * 86400
        return Date(timeIntervalSinceReferenceDate: timeInterval)
    }

}

斯威夫特 2

extension NSDate {

    func dateWithoutTime() -> NSDate {
        let timeZone = NSTimeZone.localTimeZone()
        let timeIntervalWithTimeZone = self.timeIntervalSinceReferenceDate + Double(timeZone.secondsFromGMT)
        let timeInterval = floor(timeIntervalWithTimeZone / 86400) * 86400
        return NSDate(timeIntervalSinceReferenceDate: timeInterval)
    }

}
于 2015-10-13T18:36:03.670 回答
4

使用此方法

- (NSString *)curentDateStringFromDate:(NSDate *)dateTimeInLine withFormat:(NSString *)dateFormat {
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

    [formatter setDateFormat:dateFormat];

    NSString *convertedString = [formatter stringFromDate:dateTimeInLine];

    return convertedString;
}

像下面这样使用它

NSString *dateString = [self curentDateStringFromDate:[NSDate date] withFormat:@"dd-MM-yyyy"];
于 2014-08-18T08:25:40.423 回答
1

如果有人感兴趣,我实现了一个 Swift 扩展。这将为您提供 00:00:00 UTC 的当前日期(在您的时区中),我认为这是没有 time 的当前日期的含义。

我认为它比@Murlakatam 的答案更好,因为它不涉及弄乱原始timeIntervalSinceReferenceDate数据,这就是我们首先使用日期对象的原因。

extension NSDate
{
    // Calendar objects are expensive to create to it's better to create and reuse only one.
    private static var cachedNoTimeZoneCalendar: NSCalendar = {
        let calendar = NSCalendar.currentCalendar()
        calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
        return calendar
    }()

    func dateWithoutTime() -> NSDate?
    {
        let dateComponents = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: self)
        return NSDate.cachedNoTimeZoneCalendar.dateFromComponents(dateComponents)
    }
}
于 2016-09-27T20:19:00.200 回答