如何通过基金会获得一周中的哪一天?

时间:2010-11-24 16:30:43

标签: ios objective-c cocoa-touch nsdate

如何将星期几作为字符串?

13 个答案:

答案 0 :(得分:215)

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];

答案 1 :(得分:18)

只需使用以下三行:

CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);

答案 2 :(得分:14)

此处的许多答案均已弃用。这适用于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);

答案 3 :(得分:10)

这里是你如何在Swift 3中做到这一点,并获得一个本地化的日期名称......

let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]

答案 4 :(得分:7)

-(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); 
}

答案 5 :(得分:3)

我需要一个简单的(格里高利)日周指数,其中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;
}

答案 6 :(得分:2)

我认为这个主题非常有用,所以我发布了一些与 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)
    }

}

答案 7 :(得分:2)

以下是Swift 3的更新代码

代码:

let calendar = Calendar(identifier: .gregorian)

let weekdayAsInteger = calendar.component(.weekday, from: Date())

以字符串形式打印事件名称:

 let dateFromat = DateFormatter()

datFormat.dateFormat = "EEEE"

let name = datFormat.string(from: Date())

答案 8 :(得分:1)

弗拉基米尔的回答对我很有用,但我想我会发布日期格式字符串的Unicode链接。

http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

此链接适用于iOS 6.其他版本的iOS具有不同的标准,可在X-Code文档中找到。

答案 9 :(得分:1)

这种方式适用于Swift:

WebClient sharegroupclient = new WebClient();
Uri uristring = null;
uristring = new Uri(uri);
sharegroupclient.Headers["Content-Type"] = "application/x-www-form-urlencoded";
sharegroupclient.Credentials = _groupaccount.GetCredentials();

string JsonStringParams = "group_admin=" + _groupaccount.Username + "&search=" + searchtext.Text + "&action=" + "search_group";
sharegroupclient.UploadStringCompleted += wc_RemoveUserGroupStringCompleted;
sharegroupclient.UploadStringAsync(uristring, "POST", JsonStringParams); 

然后将工作日分配给结果数字。

答案 10 :(得分:0)

我每周都有一个奇怪的问题。只设置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]  ;

答案 11 :(得分:0)

斯威夫特2:在一行中获得星期几。 (based on neoscribe answer

let dayOfWeek  = Int((myDate.timeIntervalSinceReferenceDate / (60.0*60.0*24.0)) % 7)
let isMonday   = (dayOfWeek == 0)
let isSunday   = (dayOfWeek == 6)

答案 12 :(得分:0)

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";

我们可以使用三个符号来格式化星期几:

  • E
  • ë
  • C

以下两份文件可能会对您有所帮助。

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

<强>演示:

您可以在本网站上测试您的模式:

http://nsdateformatter.com/