Helpex - Trao đổi & giúp đỡ Đăng nhập
18

Tôi có một số từ 1 đến 7, tôi muốn chuyển thành ngôn ngữ của người dùng tương đương từ Thứ Hai đến Chủ Nhật. Tôi có thể làm điều đó không và nếu có, làm thế nào?

18 hữu ích 1 bình luận 12k xem chia sẻ
28

An NSDateFormattercó thể cung cấp cho bạn danh sách tên:

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

Sau đó, bạn có thể lập chỉ mục giống như bất kỳ mảng nào khác [weekdays objectAtIndex:dayIdx];Tuy nhiên, hãy lưu ý rằng ngày đầu tiên trong tuần có thể khác nhau theo ngôn ngữ; chính xác nó có thể thay đổi như thế nào (cùng với nhiều điều khác về NSCalendar) không được giải thích rõ ràng trong tài liệu.

28 hữu ích 2 bình luận chia sẻ
12

Đây là cách của tôi:

Swift 3, iOS8 +

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

Lưu ý rằng bạn có sẵn 3 danh sách:

  • weekdaySymbols -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
  • shortWeekdaySymbols -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
  • veryShortWeekdaySymbols -> ["S", "M", "T", "W", "T", "F", "S"]
12 hữu ích 1 bình luận chia sẻ
8

Chắc chắn có thể. Dưới đây là một phương thức / hàm trả về tên ngày trong tuần cho số ngày trong tuần trong phạm vi từ 0 đến 6.

Phiên bản Objective 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];
}

và phiên bản 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]
}

và phiên bản 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]
}
8 hữu ích 0 bình luận chia sẻ
2
NSArray *weekdaySymbols = [[NSDateFormatter alloc] weekdaySymbols];

Bạn có thể sử dụng một trong các {weekdaySymbols, shortWeekdaySymbols, veryShortWeekdaySymbols}

2 hữu ích 2 bình luận chia sẻ
2

Dựa trên giải pháp tuyệt vời của gavdotnet, phiên bản châu Âu (bắt đầu từ thứ Hai) là:

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
}
2 hữu ích 1 bình luận chia sẻ
0

Tôi đã tìm ra giải pháp này: Bạn có đối tượng ngày tháng của mình, bạn muốn lấy ngày trong tuần ra khỏi đối tượng đó.

  1. Đặt ngôn ngữ thành định dạng ngày của bạn như hiển thị bên dưới

    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. Làm điều này, bạn có thể chắc chắn rằng bạn đang nhận được số nhận dạng chính xác cho bộ định dạng ngày của mình, sau đó với bộ định dạng ngày được định cấu hình, bạn có thể tiếp tục và lấy chuỗi ngày trong tuần

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

Tôi hi vọng nó sẽ giúp ích cho mọi người :). chúc mừng năm mới.

0 hữu ích 2 bình luận chia sẻ
-1

Nếu bạn đang xử lý các đối tượng Ngày, giả sử rằng bạn đã thêm tùy chọn bản địa hóa vào dự án của mình, bạn có thể dễ dàng sử dụng mã sau:

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

Điều này sẽ tự động phát hiện ngôn ngữ ứng dụng của bạn và xuất ngày được bản địa hóa dưới dạng chuỗi.

-1 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ objective-c ios cocoa-touch localization , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading