Antworten:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
Gibt den aktuellen Wochentag als Zeichenfolge im Gebietsschema aus, abhängig von den aktuellen regionalen Einstellungen.
Um nur eine Wochentagsnummer zu erhalten, müssen Sie die NSCalendar-Klasse verwenden:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
Verwenden Sie einfach diese drei Zeilen:
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
Viele der Antworten hier sind veraltet. Dies funktioniert ab iOS 8.4 und gibt Ihnen den Wochentag als Zeichenfolge und als Zahl an.
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);
weekday
Komponente von NSCalendar
um eine handelt NSInteger
, müssen Sie bei Bedarf [comps weekday]
eine int
umwandeln, da sonst eine Warnung angezeigt wird.
So machen Sie es in Swift 3 und erhalten einen lokalisierten Tagesnamen…
let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]
-(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);
}
Ich brauchte einen einfachen (gregorianischen) Wochentagsindex, wobei 0 = Sonntag und 6 = Samstag, um in Mustervergleichsalgorithmen verwendet zu werden. Von dort aus ist es einfach, den Tagesnamen mithilfe des Index aus einem Array nachzuschlagen. Folgendes habe ich mir ausgedacht, für das keine Datumsformatierer oder die Manipulation von NSCalendar oder Datumskomponenten erforderlich sind:
+(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;
}
Hier ist der aktualisierte Code für Swift 3
Code:
let calendar = Calendar(identifier: .gregorian)
let weekdayAsInteger = calendar.component(.weekday, from: Date())
So drucken Sie den Namen des Ereignisses als Zeichenfolge:
let dateFromat = DateFormatter()
datFormat.dateFormat = "EEEE"
let name = datFormat.string(from: Date())
Ich denke, dieses Thema ist wirklich nützlich, deshalb poste ich Code, der mit Swift 2.1 kompatibel ist.
extension NSDate {
static func getBeautyToday() -> String {
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE',' dd MMMM"
return dateFormatter.stringFromDate(now)
}
}
Überall können Sie anrufen:
let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"
Swift 3.0
Wie von @ delta2flat vorgeschlagen, aktualisiere ich die Antwort, damit der Benutzer ein benutzerdefiniertes Format angeben kann.
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)
}
}
Die Antwort von Vladimir hat für mich gut funktioniert, aber ich dachte, ich würde den Unicode-Link für die Zeichenfolgen im Datumsformat veröffentlichen.
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
Dieser Link ist für iOS 6. Die anderen Versionen von iOS haben andere Standards, die in der X-Code-Dokumentation zu finden sind.
So funktioniert es in Swift:
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
Ordnen Sie dann die Wochentage den resultierenden Zahlen zu.
Ich hatte ein ziemlich seltsames Problem damit, einen Wochentag zu bekommen. Nur die Einstellung des ersten Wochentags war nicht genug. Es war auch notwendig, die Zeitzone festzulegen. Meine Arbeitslösung war:
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] ;
Swift 2: Holen Sie sich den Wochentag in einer Zeile. ( basierend auf neoscribe Antwort )
let dayOfWeek = Int((myDate.timeIntervalSinceReferenceDate / (60.0*60.0*24.0)) % 7)
let isMonday = (dayOfWeek == 0)
let isSunday = (dayOfWeek == 6)
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";
Es gibt drei Symbole, mit denen wir den Wochentag formatieren können:
Die folgenden zwei Dokumente können Ihnen helfen.
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
Demo:
Sie können Ihr Muster auf dieser Website testen:
[dateFormatter weekdaySymbols]
(und ähnliche) verwenden, die ein NSArray von NSStrings ab Sonntag bei Index 0 zurückgeben.