Преобразование строковой даты в полезную дату - PullRequest
1 голос
/ 29 мая 2020

Я новичок в программировании и работаю с базой данных, в которой есть поле даты. Все данные в поле сохраняются в виде строк в формате ггггммдд. Я хочу преобразовать их во что-то более удобное для отображения пользователю. Для этого я создал следующую структуру и функцию. Это работает, но мне было интересно, есть ли какие-нибудь более простые идеи.

struct MyDate {
   var day: String
   var month: String
   var year: String
}

func ConvertToUsefullDate (_ date: String) -> MyDate {
    var myDate: MyDate = .init(day: "", month: "", year: "")

    myDate.year =
    String(date[date.index(date.startIndex, offsetBy: 0)]) +
    String(date[date.index(date.startIndex, offsetBy: 1)]) +
    String(date[date.index(date.startIndex, offsetBy: 2)]) +
    String(date[date.index(date.startIndex, offsetBy: 3)])

myDate.month =
    String(date[date.index(date.startIndex, offsetBy: 4)]) +
    String(date[date.index(date.startIndex, offsetBy: 5)])

myDate.day =
    String(date[date.index(date.startIndex, offsetBy: 6)]) +
    String(date[date.index(date.startIndex, offsetBy: 7)])

switch myDate.month {
    case "01": myDate.month = "Jan"
    case "02": myDate.month = "Feb"
    case "03": myDate.month = "Mar"
    case "04": myDate.month = "Apr"
    case "05": myDate.month = "May"
    case "06": myDate.month = "Jun"
    case "07": myDate.month = "Jul"
    case "08": myDate.month = "Aug"
    case "09": myDate.month = "Sep"
    case "10": myDate.month = "Oct"
    case "11": myDate.month = "Nov"
    case "12": myDate.month = "Dec"
    default: myDate.month = "Invalid"
}

return myDate

}

Спасибо, все отзывы приветствуются.

Daniel

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Существует существующий тип Date, который вы, вероятно, должны использовать вместо вашего собственного типа.

Чтобы создать объект Date из форматированной строки, используйте DateFormatter:

let inputDateString = "20200428"

let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyyMMdd"
inputFormatter.locale = Locale(identifier: "en_US_POSIX")

// date is optional
let date = inputFormatter.date(from: inputDateString) 

Если у вас есть объект Date, вы можете вывести его в любом формате:

let outputFormatter = DateFormatter()

// 28 April, 2020
outputFormatter.dateFormat = "dd MMMM, yyyy" 

Или, лучше, использовать способ с учетом локали:

let outputFormatter = DateFormatter()
outputFormatter.dateStyle = .long
outputFormatter.timeStyle = .none

Затем вы можете преобразовать его в строку:

let outputDateString = outputFormatter.string(from: date!) // ! for simplicity

print(outputDateString)
1 голос
/ 29 мая 2020

попробуйте следующее:

let unformattedDate = your unformatted date

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd" (or whatever your current format is)
let newDate : NSDate = dateFormatter.date(from: unformattedDate!)! as NSDate

// новый формат даты, измените на формат, который вам нравится (мне нравится MM / dd / yyyy)

dateFormatter.dateFormat = "MM/dd/yyyy"
let formattedDate = dateFormatter.string(from: dateFromStringstartDate as Date)

, тогда вы можете использовать formattedDate

используйте MMMM для представления месяца

используйте d ddd для представления дня недели

используйте dd для представления дня

используйте гггг для обозначения года

и используйте ЧЧ: мм: сс для обозначения времени

, чтобы увидеть другие форматы, посмотрите изображение ниже! изображение всех форматов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...