Быстрое преобразование из TimeInterval в Int

Что-то не так с моим методом: вместо того, чтобы печатать 07.05.2024, он печатает 07.07.2024.

ВременнойИнтервал = 1720189102.0

print: Необязательно((год: Необязательно(2024), месяц: Необязательно(7), день: Необязательно(7)))

https://www.unixtimestamp.com/index.php

extension TimeInterval {
    
   func dateTimestampDividedInt(date: TimeInterval) -> (year: Int?, month: Int?, day: Int?) {
        
        let dateFormatter = DateFormatter()
        let dateConv = Date()
        dateFormatter.dateFormat = "yyyy"
        let year = dateFormatter.string(from: dateConv)
        let yearInt = Int(year)
        dateFormatter.dateFormat = "MM"
        let month = dateFormatter.string(from: dateConv)
        let monthInt = Int(month)
        dateFormatter.dateFormat = "dd"
        let day = dateFormatter.string(from: dateConv)
        let dayInt = Int(day)
        
        return (yearInt, monthInt, dayInt)
    }

}

Как должна выглядеть правильная функция?


52
1

Ответ:

Решено

Правильная функция должна использовать компоненты календарей. Это означает, что возвращаемое значение даже не обязательно должно быть необязательным. И он автоматически преобразует его в Int. И он короче. И это решает проблему.

extension TimeInterval {
    static func dateTimestampDividedInt(date: TimeInterval) -> (year: Int, month: Int, day: Int) {
        let calendar = Calendar.current
        let date = Date(timeIntervalSince1970: date)
        
        let day = calendar.component(.day, from: date)
        let month = calendar.component(.month, from: date)
        let year = calendar.component(.year, from: date)
        
        return (year, month, day)
    }
}