将 12 小时 UTC 日期转换为 Swift 中的 24 小时本地时区格式
Convert 12Hr UTC date to 24Hr Local TimeZone format in Swift
根据 UTC to IST conversion tool 如果 UTC 12 小时日期字符串是 = "2018-12-31 07:35 PM"
则需要将其转换为 "2019-01-01 01:05"
(IST 中的 24 小时格式)[注意:此处12 小时 IST 转换日期为“2019-01-01 01:05 AM”]
那么如何将这个 12 小时 UTC 日期转换为 24 小时 IST 日期格式呢?
当前代码是:
static func convertUTCdateToLocalTimezoneDate(dateString: String, fromDateFormat: String, toDateFormat: String) -> String {
if dateString.count > 0 {
let dateFormatter = DateFormatter()
let is24Hr: Bool = AppUtility.isSystemTimeFormatIs24Hr(dateString: AppUtility.getIphoneCurrnetTime())
let fromDateFormatLocal = is24Hr == true ? kDateIn24Format : kDateIn12Format
dateFormatter.dateFormat = fromDateFormatLocal
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let date = dateFormatter.date(from: dateString)
var timeStamp = ""
dateFormatter.dateFormat = toDateFormat
dateFormatter.timeZone = NSTimeZone.local
timeStamp = dateFormatter.string(from: date!)
return timeStamp
}
return ""
}
static func isSystemTimeFormatIs24Hr(dateString: String) -> Bool {
let formatter = DateFormatter()
formatter.locale = NSLocale.current
formatter.dateStyle = .none
formatter.timeStyle = .short
let amRange: NSRange? = (dateString as NSString).range(of: formatter.amSymbol)
let pmRange: NSRange? = (dateString as NSString).range(of: formatter.pmSymbol)
let is24h: Bool = amRange?.location == NSNotFound && pmRange?.location == NSNotFound
return is24h
}
func getDateFrom(_ dateString: String, withFormat formatString: String, timeZone: String = "UTC", locale: String = "UTC") -> Date? {
var dateToReturn: Date?
let formatter = DateFormatter()
formatter.timeZone = NSTimeZone(abbreviation: timeZone) as TimeZone?
formatter.locale = Locale(identifier: locale)
formatter.dateFormat = formatString
dateToReturn = formatter.date(from: dateString)
return dateToReturn
}
func getStringFrom(_ date: Date, withFormat formatString: String, timeZone: String = "UTC", locale: String = "UTC") -> String? {
var stringToReturn: String?
let formatter = DateFormatter()
formatter.timeZone = NSTimeZone(abbreviation: timeZone) as TimeZone?
formatter.locale = Locale(identifier: locale)
formatter.dateFormat = formatString
stringToReturn = formatter.string(from: date)
return stringToReturn
}
let string12H = "2018-12-31 07:35 PM"
if let date = getDateFrom(string12H, withFormat: "yyyy-MM-dd hh:mm a") {
let dateStringWith12HFormat = getStringFrom(date, withFormat: "yyyy-MM-dd hh:mm a", timeZone: "IST", locale: "IST")
let dateStringWith24HFormat = getStringFrom(date, withFormat: "yyyy-MM-dd HH:mm", timeZone: "IST", locale: "IST")
}
以下代码将解决您的问题
func dateFormatter() -> Date? {
let inputDateString = "2018-12-31 07:30:00 PM"
let outFormatter = DateFormatter()
outFormatter.locale = Locale(identifier: "UTC")
outFormatter.timeZone = TimeZone(abbreviation: "UTC")
outFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
let outDate = outFormatter.date(from: inputDateString)
outFormatter.locale = Locale.current
outFormatter.timeZone = TimeZone.current
outFormatter.dateFormat = "yyyy-MM-dd hh:mm a"
let date12HrsString = outFormatter.string(from: outDate!)
print("12 Hrs Format: \(date12HrsString)")
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date24HrsString = outFormatter.string(from: outDate!)
print("24 Hrs Format: \(date24HrsString)")
return outDate
}
根据 UTC to IST conversion tool 如果 UTC 12 小时日期字符串是 = "2018-12-31 07:35 PM"
则需要将其转换为 "2019-01-01 01:05"
(IST 中的 24 小时格式)[注意:此处12 小时 IST 转换日期为“2019-01-01 01:05 AM”]
那么如何将这个 12 小时 UTC 日期转换为 24 小时 IST 日期格式呢?
当前代码是:
static func convertUTCdateToLocalTimezoneDate(dateString: String, fromDateFormat: String, toDateFormat: String) -> String {
if dateString.count > 0 {
let dateFormatter = DateFormatter()
let is24Hr: Bool = AppUtility.isSystemTimeFormatIs24Hr(dateString: AppUtility.getIphoneCurrnetTime())
let fromDateFormatLocal = is24Hr == true ? kDateIn24Format : kDateIn12Format
dateFormatter.dateFormat = fromDateFormatLocal
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let date = dateFormatter.date(from: dateString)
var timeStamp = ""
dateFormatter.dateFormat = toDateFormat
dateFormatter.timeZone = NSTimeZone.local
timeStamp = dateFormatter.string(from: date!)
return timeStamp
}
return ""
}
static func isSystemTimeFormatIs24Hr(dateString: String) -> Bool {
let formatter = DateFormatter()
formatter.locale = NSLocale.current
formatter.dateStyle = .none
formatter.timeStyle = .short
let amRange: NSRange? = (dateString as NSString).range(of: formatter.amSymbol)
let pmRange: NSRange? = (dateString as NSString).range(of: formatter.pmSymbol)
let is24h: Bool = amRange?.location == NSNotFound && pmRange?.location == NSNotFound
return is24h
}
func getDateFrom(_ dateString: String, withFormat formatString: String, timeZone: String = "UTC", locale: String = "UTC") -> Date? {
var dateToReturn: Date?
let formatter = DateFormatter()
formatter.timeZone = NSTimeZone(abbreviation: timeZone) as TimeZone?
formatter.locale = Locale(identifier: locale)
formatter.dateFormat = formatString
dateToReturn = formatter.date(from: dateString)
return dateToReturn
}
func getStringFrom(_ date: Date, withFormat formatString: String, timeZone: String = "UTC", locale: String = "UTC") -> String? {
var stringToReturn: String?
let formatter = DateFormatter()
formatter.timeZone = NSTimeZone(abbreviation: timeZone) as TimeZone?
formatter.locale = Locale(identifier: locale)
formatter.dateFormat = formatString
stringToReturn = formatter.string(from: date)
return stringToReturn
}
let string12H = "2018-12-31 07:35 PM"
if let date = getDateFrom(string12H, withFormat: "yyyy-MM-dd hh:mm a") {
let dateStringWith12HFormat = getStringFrom(date, withFormat: "yyyy-MM-dd hh:mm a", timeZone: "IST", locale: "IST")
let dateStringWith24HFormat = getStringFrom(date, withFormat: "yyyy-MM-dd HH:mm", timeZone: "IST", locale: "IST")
}
以下代码将解决您的问题
func dateFormatter() -> Date? {
let inputDateString = "2018-12-31 07:30:00 PM"
let outFormatter = DateFormatter()
outFormatter.locale = Locale(identifier: "UTC")
outFormatter.timeZone = TimeZone(abbreviation: "UTC")
outFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
let outDate = outFormatter.date(from: inputDateString)
outFormatter.locale = Locale.current
outFormatter.timeZone = TimeZone.current
outFormatter.dateFormat = "yyyy-MM-dd hh:mm a"
let date12HrsString = outFormatter.string(from: outDate!)
print("12 Hrs Format: \(date12HrsString)")
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date24HrsString = outFormatter.string(from: outDate!)
print("24 Hrs Format: \(date24HrsString)")
return outDate
}