web-dev-qa-db-fra.com

Comment puis-je obtenir le jour de la semaine avec Foundation?

Comment puis-je obtenir le jour de la semaine sous forme de chaîne?

108
Moshe
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);

affiche le jour de la semaine en cours sous forme de chaîne dans l'environnement local, en fonction des paramètres régionaux actuels.

Pour obtenir uniquement un numéro de jour de semaine, vous devez utiliser la classe NSCalendar:

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
215
Vladimir

Il suffit d'utiliser ces trois lignes:

CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
18
John Wilund

Beaucoup de réponses ici sont obsolètes. Cela fonctionne à partir d'iOS 8.4 et vous donne le jour de la semaine sous forme de chaîne et de nombre.

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);
14
George Steiner

Voici comment vous le faites dans Swift 3 et obtenez un nom de jour localisé…

let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]
10
Ashley Mills
-(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); 
}
7
Ha cong Thuan

J'avais besoin d'un index simple (grégorien) du jour de la semaine, où 0 = dimanche et 6 = samedi pour être utilisés dans les algorithmes de correspondance de motifs. À partir de là, il suffit de rechercher le nom du jour dans un tableau utilisant l’index. Voici ce que je propose qui ne nécessite pas de formateur de date, ni de manipulation de NSCalendar ou de composant de date:

+(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;
}
3
neoscribe

Voici le code mis à jour pour Swift 3

Code:

let calendar = Calendar(identifier: .gregorian)

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

Pour imprimer le nom de l'événement sous forme de chaîne:

 let dateFromat = DateFormatter()

datFormat.dateFormat = "EEEE"

let name = datFormat.string(from: Date())
2
Janmenjaya

Je pense que ce sujet est vraiment utile, alors je poste du code Swift 2.1 compatible.

extension NSDate {

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

}

Où que vous puissiez appeler:

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

Swift 3.

Comme @ delta2flat l'a suggéré, je mets à jour réponse en donnant à l'utilisateur la possibilité de spécifier un format personnalisé.

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)
    }

}
2
Luca Davanzo

La réponse de Vladimir a bien fonctionné pour moi, mais je pensais que je publierais le lien Unicode pour les chaînes de format de date.

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

Ce lien concerne iOS 6. Les autres versions d'iOS ont des normes différentes qui peuvent être trouvées dans la documentation X-Code.

1
EquiAvia Tech

De cette façon, cela fonctionne dans Swift:

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

Attribuez ensuite les jours de la semaine aux nombres résultants.

1
brainray

J'ai eu un problème assez étrange avec un jour de la semaine. Se contenter de régler le premier mercredi n'était pas suffisant. Il était également nécessaire de définir le fuseau horaire. Ma solution de travail était:

 NSCalendar* cal = [NSCalendar currentCalendar];
 [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
 [cal setFirstWeekday:1]; //Sunday
 NSDateComponents* comp = [cal components:( NSWeekOfMonthCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit)  fromDate:date];
 return [comp weekday]  ;
0
Maciek z Wrocławia
self.dateTimeFormatter = [[NSDateFormatter alloc] init];
self.dateTimeFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; // your timezone
self.dateTimeFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"zh_CN"]; // your locale
self.dateTimeFormatter.dateFormat = @"ccc MM-dd mm:ss";

nous pouvons utiliser trois symboles pour formater le jour de la semaine:

  • E
  • e
  • c

Les deux documents suivants peuvent vous aider.

https://developer.Apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

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

Démo:

vous pouvez tester votre modèle sur ce site:

http://nsdateformatter.com/

0
Andy.C

Swift 2: obtenez le jour de la semaine en une ligne. ( basé sur la réponse neoscribe )

let dayOfWeek  = Int((myDate.timeIntervalSinceReferenceDate / (60.0*60.0*24.0)) % 7)
let isMonday   = (dayOfWeek == 0)
let isSunday   = (dayOfWeek == 6)
0
Simon Pouliot