получить время и дату по NSDate

#iphone #objective-c #date #time #nsdate

#iPhone #objective-c #Дата #время #nsdate

Вопрос:

как я могу получить дату и время из NSDate. Я хочу видеть их отдельно. Спасибо

Комментарии:

1. Когда вы говорите «увидеть их», вы имеете в виду в строковой переменной? Или поместить их в два разных объекта NSDate? Например: NSDate *time amp; NSDate *date

Ответ №1:

 NSDate *localDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.dateFormat = @"MM/dd/yy";

NSString *dateString = [dateFormatter stringFromDate: localDate];



NSDateFormatter *timeFormatter = [[NSDateFormatter alloc]init];
timeFormatter.dateFormat = @"HH:mm:ss";


NSString *dateString = [timeFormatter stringFromDate: localDate];
  

Существует множество различных способов представления даты и времени, поэтому проверьте NSDateFormatter для получения дополнительной информации.

Комментарии:

1. Будьте осторожны, потому что вы будете жестко кодировать формат в «»ММ / дд / гг» и «ЧЧ: мм: сс», что помешает его правильной локализации. Смотрите ответ McCygnus о том, как разрешить системе управлять форматированием.

Ответ №2:

я бы предпочел использовать NSDateComponents и NSCalendar, если вы действительно хотите иметь значения для минуты, часа и даты… Что-то вроде этого:

 NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit
                                                                   fromDate:[NSDate date]];
  

затем вы можете использовать свойства компонентов для доступа к значению каждого компонента с помощью component.hour, component.year и т.д.

Также, пожалуйста, обратите внимание, что если вы собираетесь использовать пример NSDateFormatter, тогда вы должны помнить, что NSDateFormatter — это тяжелый объект, и вам действительно следует использовать его повторно, если это возможно…

Комментарии:

1. Я был почти уверен, что хочу NSDateComponents. Спасибо за пример.

2. Этот метод работает очень медленно

Ответ №3:

Я бы использовал следующее вместо других ответов:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSString *formattedDateString = [dateFormatter stringFromDate:yourDate];
[dateFormatter release];
  

Преимущество этого заключается в том, что форматирование будет соответствовать тому, что пользователь установил в своих системных настройках. Таким образом, вам не придется беспокоиться о том, предпочитает ли пользователь короткие даты в формате 31.10.11 или 31/10/11. Список доступных стилей приведен в документации.

Swift 2.2:

 let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateFormatter.timeStyle = .NoStyle
let myDateString = dateFormatter.stringFromDate(myNSDate)

dateFormatter.dateStyle = NSDateFormatterStyle.NoStyle
dateFormatter.timeStyle = .ShortStyle
let myTimeString = dateFormatter.stringFromDate(myNSDate)
  

Ответ №4:

В Swift вы можете пользоваться расширением, например:

 // MARK: - NSDate extension -

extension NSDate {

    func toString() -> String {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "dd MMMM yyyy - HH:mm"
        return dateFormatter.stringFromDate(self)
    }

    func getTime() -> String {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        return dateFormatter.stringFromDate(self)
    }

    func getDate() -> String {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "dd/MM/yyyy"
        return dateFormatter.stringFromDate(self)
    }
}
  

И затем, в любом месте вашего кода вы можете сделать:

 print("Time right now: (NSDate().getTime())") 
  

Ответ №5:

SWIFT 4 версия ответа @McCygnus

 let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
let myDateString = dateFormatter.string(from: Date())

dateFormatter.dateStyle = .none
dateFormatter.timeStyle = .short
let myTimeString = dateFormatter.string(from: Date())