ฉันจะกำหนดวันในสัปดาห์เป็นสตริงได้อย่างไร
ฉันจะกำหนดวันในสัปดาห์เป็นสตริงได้อย่างไร
คำตอบ:
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];
เพียงใช้สามบรรทัดนี้:
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
หลายคำตอบที่นี่เลิกใช้งานแล้ว ใช้งานได้กับ 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);
weekday
ส่วนประกอบของNSCalendar
is an NSInteger
คุณจะต้องส่ง[comps weekday]
ไปยัง an int
หากต้องการมิฉะนั้นจะแสดงคำเตือนเกี่ยวกับสิ่งนี้
นี่คือวิธีที่คุณทำใน Swift 3 และรับชื่อวันที่แปลเป็นภาษาท้องถิ่น ...
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);
}
ฉันต้องการดัชนีวันธรรมดา (เกรกอเรียน) ในสัปดาห์โดยที่ 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;
}
นี่คือรหัสที่อัปเดตสำหรับ Swift 3
รหัส:
let calendar = Calendar(identifier: .gregorian)
let weekdayAsInteger = calendar.component(.weekday, from: Date())
ในการพิมพ์ชื่อเหตุการณ์เป็น String:
let dateFromat = DateFormatter()
datFormat.dateFormat = "EEEE"
let name = datFormat.string(from: Date())
ฉันคิดว่าหัวข้อนี้มีประโยชน์จริงๆดังนั้นฉันจึงโพสต์โค้ดที่เข้ากันได้กับ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)
}
}
คำตอบของ Vladimir ทำงานได้ดีสำหรับฉัน แต่ฉันคิดว่าฉันจะโพสต์ลิงก์ Unicode สำหรับสตริงรูปแบบวันที่
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
ลิงก์นี้มีไว้สำหรับ iOS 6 ส่วน iOS เวอร์ชันอื่น ๆ มีมาตรฐานที่แตกต่างกันซึ่งสามารถพบได้ในเอกสาร X-Code
วิธีนี้ทำงานใน Swift:
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
จากนั้นกำหนดวันธรรมดาให้กับตัวเลขผลลัพธ์
ฉันมีปัญหาแปลก ๆ เกี่ยวกับการรับวันในสัปดาห์ เฉพาะการตั้งค่า firstWeekday ไม่เพียงพอ นอกจากนี้ยังจำเป็นต้องกำหนดเขตเวลาด้วย โซลูชันการทำงานของฉันคือ:
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: รับวันของสัปดาห์ในบรรทัดเดียว ( ขึ้นอยู่กับคำตอบของ 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";
มีสามสัญลักษณ์ที่เราสามารถใช้เพื่อจัดรูปแบบวันในสัปดาห์:
เอกสารสองฉบับต่อไปนี้อาจช่วยคุณได้
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
การสาธิต:
คุณสามารถทดสอบรูปแบบของคุณบนเว็บไซต์นี้:
[dateFormatter weekdaySymbols]
(และคล้ายกัน) ซึ่งจะส่งคืน NSArray ของ NSStrings โดยเริ่มต้นด้วยวันอาทิตย์ที่ดัชนี 0