#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())