我需要能够从nsdate获得工作日,我有以下代码,它总是返回1.我试图改变月份,我尝试了从1到12的所有内容,但是工作日的结果总是1
NSDate *date2 = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d", 2010, 6, 1]];
unsigned units2 = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit;
NSCalendar *calendar2 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components2 = [calendar2 components:units2 fromDate:date2];
int startWeekDay = [components2 weekday];
[date2 release];
[calendar2 release];
答案 0 :(得分:44)
创建仅包含工作日的NSDateFormatter
将完成您想要的工作。
NSDate *now = [NSDate date];
NSDateFormatter *weekday = [[[NSDateFormatter alloc] init] autorelease];
[weekday setDateFormat: @"EEEE"];
NSLog(@"The day of the week is: %@", [weekday stringFromDate:now]);
如果您需要国际化,NSDateFormatter
可以发送一个区域设置,这将提供正确的翻译。
日期格式化程序通过此标准进行控制:Unicode Date Formats
答案 1 :(得分:6)
为Mac编辑:
字符串的格式必须是 -YYYY-MM-DD HH:MM:SS±HHMM 根据文档,所有字段必须
旧答案(适用于iPhone并在模拟器上测试):
-initWithString:
中没有(公开)NSDate
方法,而您返回的内容是而不是您期望的内容。
使用正确配置的(您需要提供输入格式)NSDateFormatter
和-dateFromString:
。
答案 2 :(得分:0)
我解决了问题,问题是我的日期字符串的格式错误了:
NSDate *date = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d 10:45:32 +0600", selectedYear, selectedMonth, selectedDay]];
因为我不关心我随机将时间传递到字符串
的时间答案 3 :(得分:0)
有人来这里寻找更新的Swift 4解决方案:
extension Date {
func getDayOfWeek() -> String {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.setLocalizedDateFormatFromTemplate("EEEE")
return dateFormatter.string(from: self)
}
}
let inputString = "2018-04-16T15:47:39.000Z"
let result = inputString.getDayOfWeek()
result = Monday
答案 4 :(得分:0)
Swift 3中最令人讨厌的答案。
let formatter = DateFormatter()
formatter.dateFormat = "EEEE"
print("The day of the week is \(formatter.string(from: Date()))")
答案 5 :(得分:0)
我使用了以下网站来帮助设置字符串以检索我想要的日期格式