【问题标题】:Get NSDate and convert it from the 24 hour format to 12 hour format in swift获取 NSDate 并快速将其从 24 小时格式转换为 12 小时格式
【发布时间】:2015-09-15 03:32:18
【问题描述】:

我看到这篇文章是针对其他语言的,但不是针对 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)

【问题讨论】:

标签: swift nsdate nsdateformatter


【解决方案1】:

您的日期字符串后缀 +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"
}

【讨论】:

    【解决方案2】:

    如果要剥离时区信息,请传递 GMT 时区。 这段代码和你的完全一样

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

    【讨论】:

      【解决方案3】:

      将 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
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2019-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多