Yanıtlar:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
geçerli bölgesel ayarlara bağlı olarak yerel ayarda bir dizi olarak haftanın geçerli gününü verir.
Sadece bir hafta günü numarası almak için NSCalendar sınıfını kullanmanız gerekir:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
Sadece şu üç satırı kullanın:
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
Buradaki yanıtların çoğu kullanımdan kaldırılmıştır. Bu, iOS 8.4'ten itibaren çalışır ve size haftanın gününü bir dizi ve bir sayı olarak verir.
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
bileşen NSCalendar
bir olduğunu NSInteger
, sen döküm gerekecektir [comps weekday]
bir etmek int
eğer gerekiyorsa, aksi takdirde bu ilgili bir uyarı gösterecektir.
İşte Swift 3'te bunu nasıl yapacağınız ve yerelleştirilmiş bir gün adı alacağınız ...
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);
}
Basit (Gregoryen) bir haftanın günü endeksine ihtiyacım vardı, burada 0 = Pazar ve 6 = Cumartesi model eşleştirme algoritmalarında kullanılacak. Buradan, indeksi kullanarak bir diziden gün adını aramak basit bir meseledir. Tarih biçimlendiricileri veya NSCalendar veya tarih bileşeni manipülasyonu gerektirmeyen bulduğum şey şu:
+(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;
}
İşte Swift 3 için güncellenmiş kod
Kod:
let calendar = Calendar(identifier: .gregorian)
let weekdayAsInteger = calendar.component(.weekday, from: Date())
Olayın adını String olarak yazdırmak için:
let dateFromat = DateFormatter()
datFormat.dateFormat = "EEEE"
let name = datFormat.string(from: Date())
Bu konunun gerçekten yararlı olduğunu düşünüyorum, bu yüzden Swift 2.1 uyumlu bazı kodlar gönderiyorum .
extension NSDate {
static func getBeautyToday() -> String {
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE',' dd MMMM"
return dateFormatter.stringFromDate(now)
}
}
Arayabileceğiniz her yerde:
let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"
Swift 3.0
@ Delta2flat'ın önerdiği gibi, kullanıcıya özel format belirleme olanağı sağlayan yanıtı güncelliyorum.
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)
}
}
Vladimir'in cevabı benim için iyi çalıştı, ancak tarih biçimi dizeleri için Unicode bağlantısını göndereceğimi düşündüm.
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
Bu bağlantı iOS 6 içindir. İOS'un diğer sürümleri, X-Code belgelerinde bulunabilecek farklı standartlara sahiptir.
Bu şekilde Swift'de çalışır:
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
Ardından hafta içi günlerini elde edilen sayılara atayın.
Haftanın bir gününü alma konusunda oldukça tuhaf bir sorun yaşadım. Sadece ilk Hafta Günü ayarı yeterli değildi. Saat dilimini ayarlamak da gerekliydi. Çalışma çözümüm şuydu:
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: Haftanın günlerini tek satırda alın. ( neoscribe cevabına göre )
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";
Haftanın gününü biçimlendirmek için kullanabileceğimiz üç sembol vardır:
Aşağıdaki iki belge size yardımcı olabilir.
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
Demo:
kalıbınızı bu web sitesinde test edebilirsiniz:
[dateFormatter weekdaySymbols]
(ve benzerlerini), bu da Pazar ile 0. endekste başlayan NSStrings