获取NSDate并用swift将其从24小时格式转换为12小时格式



我在其他语言中看到过这篇文章,但在swift中没有。我有一个以2015-08-31 21:36:00 +0000格式保存的日期,我可以用下面的代码提取日、月、年和工作日来生成Monday, August 31, 2015。当我尝试使用:

let hourInt = components.hour
var hourString = String(hourInt)

它打印了四个小时的时差。在这种情况下,"17"表示"21"。我该怎么做是否显示为9:36 P.M.

let flags: NSCalendarUnit =  NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitHour |  NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitWeekday | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear
let date = NSDate()
let dateFormatter: NSDateFormatter = NSDateFormatter()
let components = NSCalendar.currentCalendar().components(flags, fromDate: array.date)

let weekday = components.weekday
let weekdays = dateFormatter.weekdaySymbols
let weekdayString = weekdays[weekday-1] as! String
let month = components.month
let months = dateFormatter.monthSymbols
let monthString = months[month-1] as! String
let dayInt = components.day
var dayString = String(dayInt)
let year = components.year
let yearString = String(year)
println(weekdayString + ", " + monthString + " " + dayString + ", " + yearString)

您的日期字符串后缀+0000表示它是UTC时间。如果您想以UTC显示时间,则需要在设置日期格式化程序时指定它。

let dateString = "2015-08-31 21:36:00 +0000"
let df = NSDateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
if let date = df.dateFromString(dateString) {
    // now you have your date object
    // to display UTC time you have to specify timeZOne UTC
    df.timeZone = NSTimeZone(forSecondsFromGMT: 0)
    df.dateFormat = "EEEE, MMMM dd, yyyy h:mm:ss a"
    let stringFromDate = df.stringFromDate(date)
    println(stringFromDate)   // "Monday, August 31, 2015 9:36:00 PM"
}

如果要剥离时区信息,请通过GMT时区。此代码与您的完全相同

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy"
dateFormatter.timeZone = NSTimeZone(abbreviation: "GMT")
println(dateFormatter.stringFromDate(array.date))

将NSDateFormatter的区域设置为en_US_POSIX为我修复了问题。

let sharedFormatter:NSDateFormatter = {
    let formatter = NSDateFormatter()
    formatter.locale = NSLocale(localeIdentifier:"en_US_POSIX")
    return formatter
}()
sharedFormatter.dateFormat = "MMM d YYYY, h:mm a"
let dateString = sharedFormatter.stringFromDate(NSDate()) 
// Aug 2 2016, 5:45 PM

Swift 5.0

let dateString = "2015-08-31 21:36:00 +0000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
if let date = dateFormatter.date(from: dateString) {
    // now you have your date object
    // to display UTC time you have to specify timeZOne UTC
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy h:mm:ss a"
    let stringFromDate = dateFormatter.string(from: date)
    print(stringFromDate)   // "Monday, August 31, 2015 9:36:00 PM"
}

最新更新