将 "yyyy-MM-dd HH:mm:ss.m" 格式的日期字符串转换为 "yyyy-MM-dd HH:mm:ss" 时出现问题
Issue when converting a date string of format "yyyy-MM-dd HH:mm:ss.m" to "yyyy-MM-dd HH:mm:ss"
我正在 swift 5 中进行一个 iOS 项目。在我的一个 API 中,日期格式为 "yyyy-MM-dd HH:mm:ss.m"。从这个日期开始,我需要获取时间。但问题是,假设我从 API 获得的日期是“1900-01-01 08:30:00.000000”,当我将此日期格式转换为 YYYY-MM-dd HH:mm:ss,结果为“1900-01-01 08:00:00”,转换前的时间为 08:30:00.000000,但转换后的时间为 08:00:00。为什么会这样?请帮我。
我会在这里添加我的代码,
let dateTime = "1900-01-01 08:30:00.000000"
let outFormatter = DateFormatter()
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.m"
if let date = outFormatter.date(from: dateTime) {
//here value od date is 1900-01-01 04:18:48 +0000
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
outFormatter.locale = tempLocale
let exactDate = outFormatter.string(from: date)
//here the value of exactDate is 1900-01-01 08:00:00
}
m
是分钟,S
是毫秒,所以格式必须是 "yyyy-MM-dd HH:mm:ss.S"
.
此外,对于固定日期格式,强烈建议将语言环境设置为 en_US_POSIX
let dateTime = "1900-01-01 08:30:00.000000"
let outFormatter = DateFormatter()
outFormatter.locale = Locale(identifier: "en_US_POSIX")
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.S"
if let date = outFormatter.date(from: dateTime) {
//here value od date is 1900-01-01 04:18:48 +0000
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let exactDate = outFormatter.string(from: date)
//here the value of exactDate is 1900-01-01 08:00:00
}
但是如果您只想从日期字符串中去除毫秒数,则有一个更简单的解决方案
let dateTime = "1900-01-01 08:30:00.000000"
let exactDate = dateTime.replacingOccurrences(of: "\.\d+", with: "", options: .regularExpression)
它删除了点和后面的任何数字
我正在 swift 5 中进行一个 iOS 项目。在我的一个 API 中,日期格式为 "yyyy-MM-dd HH:mm:ss.m"。从这个日期开始,我需要获取时间。但问题是,假设我从 API 获得的日期是“1900-01-01 08:30:00.000000”,当我将此日期格式转换为 YYYY-MM-dd HH:mm:ss,结果为“1900-01-01 08:00:00”,转换前的时间为 08:30:00.000000,但转换后的时间为 08:00:00。为什么会这样?请帮我。
我会在这里添加我的代码,
let dateTime = "1900-01-01 08:30:00.000000"
let outFormatter = DateFormatter()
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.m"
if let date = outFormatter.date(from: dateTime) {
//here value od date is 1900-01-01 04:18:48 +0000
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
outFormatter.locale = tempLocale
let exactDate = outFormatter.string(from: date)
//here the value of exactDate is 1900-01-01 08:00:00
}
m
是分钟,S
是毫秒,所以格式必须是 "yyyy-MM-dd HH:mm:ss.S"
.
此外,对于固定日期格式,强烈建议将语言环境设置为 en_US_POSIX
let dateTime = "1900-01-01 08:30:00.000000"
let outFormatter = DateFormatter()
outFormatter.locale = Locale(identifier: "en_US_POSIX")
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.S"
if let date = outFormatter.date(from: dateTime) {
//here value od date is 1900-01-01 04:18:48 +0000
outFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let exactDate = outFormatter.string(from: date)
//here the value of exactDate is 1900-01-01 08:00:00
}
但是如果您只想从日期字符串中去除毫秒数,则有一个更简单的解决方案
let dateTime = "1900-01-01 08:30:00.000000"
let exactDate = dateTime.replacingOccurrences(of: "\.\d+", with: "", options: .regularExpression)
它删除了点和后面的任何数字