我想从NSDate
获取日期,不需要时间。例如:
NSDate* today = [NSDate date]; // want to give 20-06-2012 only
我想在没有显示时间的情况下获取今天的日期,并在NSDate
变量或字符串变量中使用它。
答案 0 :(得分:42)
以防其他人寻找此事。我使用了以下内容:
NSDateComponents *components = [[NSCalendar currentCalendar]
components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:[NSDate date]];
NSDate *startDate = [[NSCalendar currentCalendar]
dateFromComponents:components];
答案 1 :(得分:8)
就性能而言,这种方法可能比使用 NSDateFormatter 或 NSCalendar 更好。
斯威夫特3,4,5
let timeInterval = floor(Date().timeIntervalSinceReferenceDate / 86400) * 86400
let newDate = Date(timeIntervalSinceReferenceDate: timeInterval)
Swift 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)
}
}
Swift 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)
}
}
答案 2 :(得分: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"];
答案 3 :(得分:0)
如果有兴趣,我实施了Swift扩展。 这将为您提供当前日期(在您的时区)00:00:00 UTC,我认为当前日期没有时间的含义。
我认为它比@ 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)
}
}