簡體   English   中英

如何在用戶的語言環境中獲取星期幾的名稱?

[英]How do I get the name of a day of the week in the user's locale?

我有一個介於 1 和 7 之間的數字,我想將其轉換為用戶的語言環境,相當於周一到周日。 我可以這樣做嗎?如果可以,怎么做?

NSDateFormatter可以為您提供名稱列表:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setLocale: [NSLocale currentLocale]];
NSArray * weekdays = [df weekdaySymbols];

然后你可以像任何其他數組一樣索引[weekdays objectAtIndex:dayIdx]; 但是請注意, 第一個工作日可能因地區而異; 它究竟如何變化(以及關於NSCalendar許多其他事情)在文檔中並沒有特別好解釋。

這是我的看法:

斯威夫特 3, iOS8+

func weekdayNameFrom(weekdayNumber: Int) -> String {
    let calendar = Calendar.current
    let dayIndex = ((weekdayNumber - 1) + (calendar.firstWeekday - 1)) % 7
    return calendar.weekdaySymbols[dayIndex]
}

請注意,您有 3 個可用列表:

  • weekdaySymbols -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
  • shortWeekdaySymbols -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
  • veryShortWeekdaySymbols -> ["S", "M", "T", "W", "T", "F", "S"]

當然可以。 下面是一個方法/函數,它返回 0 到 6 范圍內工作日編號的工作日名稱。

目標 C 版本:

- (NSString *)weekdayNameFromWeekdayNumber:(NSInteger)weekdayNumber
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Fetch the days of the week in words for the current language (Sunday to Saturday)
    NSArray *weekdaySymbols = calendar.weekdaySymbols;

    // Because the first week day changes depending on the region settings.
    //  ie. In Bangladesh the first day of the week is Friday. In UK it is Monday
    NSInteger index = (weekdayNumber + calendar.firstWeekday - 1) % 7;
    return weekdaySymbols[index];
}

和 Swift 2 版本:

func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
    let calendar = NSCalendar.currentCalendar()
    let weekdaySymbols = calendar.weekdaySymbols
    let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
    return weekdaySymbols[index]
}

和 Swift 3.0 版本:

func weekdayNameFrom(weekdayNumber: Int) -> String {
    let calendar = Calendar.current
    let weekdaySymbols = calendar.weekdaySymbols
    let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
    return weekdaySymbols[index]
}

基於gavdotnet優秀方案,歐版(周一開始)為:

func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
    var EuroDay = weekdayNumber + 1
    if EuroDay == 7 {
        EuroDay = 0
    }
    let calendar = NSCalendar.currentCalendar()
    let weekdaySymbols = calendar.weekdaySymbols
    let index = EuroDay + calendar.firstWeekday - 1
    return weekdaySymbols[index].uppercaseString
}
NSArray *weekdaySymbols = [[NSDateFormatter alloc] weekdaySymbols];

您可以使用 {weekdaySymbols、shortWeekdaySymbols、veryShortWeekdaySymbols} 之一

我找到了這個解決方案:你有你的日期對象,你想從那個對象中獲取星期幾。

  1. 將語言環境設置為您的日期格式化程序,如下所示

    let eventDate = dateFormatter.date(from: self) let language = Locale.preferredLanguages.first print("The locale id is \\(language)") // This date format can be what ever you like, in this case i used EE dd dateFormatter.dateFormat = "EE dd" if let idiomaLocale = language { dateFormatter.locale = Locale(identifier: idiomaLocale) } else { dateFormatter.locale = Locale(identifier: "es_CO") }
  2. 這樣做您可以確保您獲得了正確的日期格式化程序標識符,然后配置了您的日期格式化程序,您可以繼續並獲取星期幾的字符串

    //convert your date to string let stringDate = dateFormatter.string(from: eventDate!) return stringDate

我希望這對某人有所幫助:)。 新年快樂。

如果您正在處理 Date 對象,假設您已將本地化選項添加到您的項目中,您可以輕松使用以下代碼:

extension Date {
    var dayName: String {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: Locale.current.identifier)
        dateFormatter.dateFormat  = "E" // "EEEE" to get long style
        return dateFormatter.string(from: self)
    }
}

這將自動檢測您的應用程序的語言並將本地化的日期輸出為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM