Как я могу получить день недели с Фондом? - PullRequest
108 голосов
/ 24 ноября 2010

Как мне получить день недели в виде строки?

Ответы [ 13 ]

215 голосов
/ 24 ноября 2010
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);

выводит текущий день недели в виде строки в локали в зависимости от текущих региональных настроек.

Чтобы получить только номер дня недели, необходимо использовать класс NSCalendar:

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
18 голосов
/ 14 сентября 2012

Просто используйте эти три строки:

CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
14 голосов
/ 28 июля 2015

Многие ответы здесь устарели. Это работает с iOS 8.4 и дает вам день недели в виде строки и числа.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"The day of the week: %@", [dateFormatter stringFromDate:[NSDate date]]);

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [gregorian components:NSCalendarUnitWeekday fromDate:[NSDate date]];
int weekday = [comps weekday];
NSLog(@"The week day number: %d", weekday);
10 голосов
/ 18 ноября 2016

Вот как вы делаете это в Swift 3 и получаете локализованное название дня…

let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]
7 голосов
/ 11 марта 2013
-(void)getdate {
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    [format setDateFormat:@"MMM dd, yyyy HH:mm"];
    NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
    [timeFormat setDateFormat:@"HH:mm:ss"];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
    [dateFormatter setDateFormat:@"EEEE"];

    NSDate *now = [[NSDate alloc] init];
    NSString *dateString = [format stringFromDate:now];
    NSString *theDate = [dateFormat stringFromDate:now];
    NSString *theTime = [timeFormat stringFromDate:now];

    NSString *week = [dateFormatter stringFromDate:now];
    NSLog(@"\n"
          "theDate: |%@| \n"
          "theTime: |%@| \n"
          "Now: |%@| \n"
          "Week: |%@| \n"
         , theDate, theTime,dateString,week); 
}
3 голосов
/ 15 июля 2014

Мне нужен был простой (григорианский) индекс дня недели, где 0 = воскресенье и 6 = суббота для использования в алгоритмах сопоставления с образцом. Отсюда легко найти название дня из массива, используя индекс. Вот то, что я придумал, что не требует форматирования даты, NSCalendar или манипуляции с компонентом даты:

+(long)dayOfWeek:(NSDate *)anyDate {
    //calculate number of days since reference date jan 1, 01
    NSTimeInterval utcoffset = [[NSTimeZone localTimeZone] secondsFromGMT];
    NSTimeInterval interval = ([anyDate timeIntervalSinceReferenceDate]+utcoffset)/(60.0*60.0*24.0);
    //mod 7 the number of days to identify day index
    long dayix=((long)interval+8) % 7;
    return dayix;
}
2 голосов
/ 05 октября 2016

Вот обновленный код для Swift 3

Код:

let calendar = Calendar(identifier: .gregorian)

let weekdayAsInteger = calendar.component(.weekday, from: Date())

Чтобы напечатать название события в виде строки:

 let dateFromat = DateFormatter()

datFormat.dateFormat = "EEEE"

let name = datFormat.string(from: Date())
2 голосов
/ 14 декабря 2015

Я думаю, что эта тема действительно полезна, поэтому выкладываю код, совместимый Swift 2.1 .

extension NSDate {

    static func getBeautyToday() -> String {
       let now = NSDate()
       let dateFormatter = NSDateFormatter()
       dateFormatter.dateFormat = "EEEE',' dd MMMM"
       return dateFormatter.stringFromDate(now)
    }

}

Куда угодно вы можете позвонить:

let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"

Swift 3.0

Как и предположил @ delta2flat, я обновляю ответ, давая пользователю возможностьукажите пользовательский формат.

extension NSDate {

    static func getBeautyToday(format: String = "EEEE',' dd MMMM") -> String {
        let now = Date()
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: now)
    }

}
1 голос
/ 04 мая 2015

Таким образом, он работает в Swift:

    let calendar = NSCalendar.currentCalendar()
    let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())

Затем назначьте дни недели для полученных чисел.

1 голос
/ 12 мая 2013

Ответ Владимира работал хорошо для меня, но я подумал, что я опубликую ссылку Unicode для строк формата даты.

http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

Эта ссылка для iOS 6. Другие версии iOS имеют другие стандарты, которые можно найти в документации X-Code.

...