11

我需要能够从 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];
4

7 回答 7

43

创建一个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 日期格式

于 2010-08-19T17:27:33.210 回答
6

为 Mac 编辑:

根据文档,字符串的格式必须为—YYYY-MM-DD HH:MM:SS ±HHMM,所有字段均为必填项

旧答案(适用于 iPhone 并在模拟器上测试):

中没有(公共)-initWithString:方法NSDate,返回的不是您所期望的。

使用正确配置的(您需要提供输入格式)NSDateFormatter-dateFromString:.

于 2010-08-19T17:24:54.857 回答
0

我解决了这个问题,问题是我的日期字符串的格式错误:

NSDate *date = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d 10:45:32 +0600", selectedYear, selectedMonth, selectedDay]];

因为我不关心我随机传递一个时间到字符串末尾的时间

于 2010-08-19T17:50:42.567 回答
0

我正在使用 Xcode 6.4

有很多方法可以设置 NSDate。我不会在这里讨论这个。您已经以一种方式完成了它,使用了一个字符串(我避免的一种方法,因为它很容易出错),我正在以另一种方式设置它。无论如何,请访问您的组件 weekday 或 setDay 方法。

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitWeekday|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond) fromDate:[NSDate date]];
    NSDate *date = [calendar dateFromComponents:components];

这样,您可以像这样获取或设置任何这些组件:

[components weekday] //to get, then doSomething
[components setDay:6]; //to set

当然,NSDate *date = [calendar dateFromComponents:components];只有在您更改组件后才能设置。

我为上下文添加了额外的本地和其他组件,以防您也想设置它们。

这是免费代码,不要敲它。

于 2015-08-13T20:07:32.140 回答
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()

结果 =Monday

于 2018-04-18T13:53:48.557 回答
0

Swift 3 中最受好评的答案。

let formatter = DateFormatter()
formatter.dateFormat = "EEEE"
print("The day of the week is \(formatter.string(from: Date()))")
于 2018-07-09T11:11:51.493 回答
0

我使用以下网站帮助设置字符串以检索我想要的日期格式

Coder Wall - 目标 c 日期格式指南

于 2019-01-19T00:26:58.193 回答