Jawaban:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
mengeluarkan hari ini dalam seminggu sebagai string dalam lokal bergantung pada pengaturan regional saat ini.
Untuk mendapatkan nomor hari kerja saja, Anda harus menggunakan kelas NSCalendar:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
Cukup gunakan tiga baris ini:
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
Banyak jawaban di sini tidak digunakan lagi. Ini berfungsi pada iOS 8.4 dan memberi Anda hari dalam seminggu sebagai string dan sebagai angka.
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
komponen dari NSCalendar
adalah NSInteger
, Anda perlu mentransmisikan [comps weekday]
ke int
, jika perlu, atau akan muncul peringatan terkait hal ini.
Inilah cara Anda melakukannya di Swift 3, dan mendapatkan nama hari yang dilokalkan…
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);
}
Saya membutuhkan indeks hari dalam seminggu (Gregorian) sederhana, di mana 0 = Minggu dan 6 = Sabtu untuk digunakan dalam algoritme pencocokan pola. Dari sana, mudah saja mencari nama hari dari array menggunakan indeks. Inilah yang saya dapatkan yang tidak memerlukan pemformat tanggal, atau NSCalendar atau manipulasi komponen tanggal:
+(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;
}
Berikut adalah kode yang diperbarui untuk Swift 3
Kode:
let calendar = Calendar(identifier: .gregorian)
let weekdayAsInteger = calendar.component(.weekday, from: Date())
Untuk mencetak nama acara sebagai String:
let dateFromat = DateFormatter()
datFormat.dateFormat = "EEEE"
let name = datFormat.string(from: Date())
Saya pikir topik ini sangat berguna, jadi saya memposting beberapa kode yang kompatibel dengan Swift 2.1 .
extension NSDate {
static func getBeautyToday() -> String {
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE',' dd MMMM"
return dateFormatter.stringFromDate(now)
}
}
Ke mana pun Anda dapat menelepon:
let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"
Swift 3.0.0
Seperti yang disarankan @ delta2flat, saya memperbarui jawaban yang memberi pengguna kemampuan untuk menentukan format khusus.
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)
}
}
Jawaban Vladimir bekerja dengan baik untuk saya, tetapi saya pikir saya akan memposting tautan Unicode untuk string format tanggal.
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
Tautan ini untuk iOS 6. Versi iOS lainnya memiliki standar yang berbeda yang dapat ditemukan di dokumentasi X-Code.
Cara ini bekerja di Swift:
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
Kemudian tetapkan hari kerja ke angka yang dihasilkan.
Saya memiliki masalah yang cukup aneh dengan mendapatkan hari dalam seminggu. Hanya mengatur hari Minggu pertama saja tidak cukup. Zona waktu juga perlu diatur. Solusi kerja saya adalah:
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: Dapatkan hari dalam satu baris. ( berdasarkan jawaban neoscribe )
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";
ada tiga simbol yang bisa kita gunakan untuk memformat hari dalam seminggu:
Dua dokumen berikut dapat membantu Anda.
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
Demo:
Anda dapat menguji pola Anda di situs web ini:
[dateFormatter weekdaySymbols]
(dan serupa), yang mengembalikan NSArray NSStrings dimulai dengan Minggu di indeks 0.