ios 如何从YYYY-MM-dd 'T'HH:mm:ss.sssZ获取时间

qij5mzcb  于 2022-12-24  发布在  iOS
关注(0)|答案(4)|浏览(219)

嗨,我想从2017-07-31T11:40:00.000Z获取11:40形式的时间
下面是我正在使用的代码:

let formatter = Foundation.DateFormatter()
formatter.dateFormat = "YYYY-MM-dd'T'HH:mm:ss.sssZ" //2017-04-01T18:05:00.000
let date1  = formatter.date(from: data.arvTime)
print("date:\(String(describing: date1))")
let dateFormatterPrint = Foundation.DateFormatter()
dateFormatterPrint.dateFormat = "HH:mm"
let resultTime = dateFormatterPrint.string(from: date1!)
print("time:\(String(describing: resultTime))")

获取的时间为1:29,即我获取的时间错误。
请帮我解决这个问题。

pw9qyyiw

pw9qyyiw1#

使用日期格式

formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

代替

formatter.dateFormat = "YYYY-MM-dd'T'HH:mm:ss.sssZ"

对于完整代码

let formatter = Foundation.DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" //2017-04-01T18:05:00.000
    let date1  = formatter.date(from: "2017-04-01T18:05:00.000Z")
    print("date:\(String(describing: date1))") 
    formatter.dateFormat = "HH:mm"
    let resultTime = formatter.string(from: date1!)
    print("time:\(String(describing: resultTime))")

备选方案2

let formatter = Foundation.DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.sssZ" //2017-04-01T18:05:00.000
    let date1  = formatter.date(from: "2017-04-01T18:05:00.000Z")
    print("date:\(String(describing: date1))")
    formatter.timeZone = TimeZone(abbreviation: "UTC")
    formatter.dateFormat = "HH:mm"
    let resultTime = formatter.string(from: date1!)
    print("time:\(String(describing: resultTime))")

输出

epfja78i

epfja78i2#

NSLog始终以GMT时区(而不是您的本地时区)打印日期对象。请使用您的本地时区

sqyvllje

sqyvllje3#

使用dateFormattertimeZone属性。

let formatter = Foundation.DateFormatter()
formatter.dateFormat = "YYYY-MM-dd'T'HH:mm:ss.sssZ"
let date1  = formatter.date(from: "2017-07-31T11:40:00.000Z")
print("date:\(String(describing: date1))")
let dateFormatterPrint = Foundation.DateFormatter()
dateFormatterPrint.timeZone = TimeZone(abbreviation: "UTC")
dateFormatterPrint.dateFormat = "HH:mm"
let resultTime = dateFormatterPrint.string(from: date1!)
print("time:\(String(describing: resultTime))")
f0ofjuux

f0ofjuux4#

对于Kotlincreate扩展,您可以查看它
第一步,将字符串转换为本地日期,这里dateFormat是您的输入数据格式,timeZone是输入时间Zoon

fun String.toDate(dateFormat: String = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'", timeZone: TimeZone = TimeZone.getTimeZone("UST")): Date? {
val parser = SimpleDateFormat(dateFormat, Locale.getDefault())
parser.timeZone = timeZone
return parser.parse(this)}

第二步是将本地时间转换成你想要的时间格式,如:2022年23月12日10时50分5秒

fun Date.formatTo(dateFormat: String, timeZone: TimeZone = TimeZone.getDefault()): String {
val formatter = SimpleDateFormat(dateFormat, Locale.getDefault())
formatter.timeZone = timeZone
return formatter.format(this)}

简单调用这些函数如下

fun String.convertToLocalTime():String{
val localFormat="dd-MM-yyyy HH:mm:ss"

this.toDate()?.formatTo(dateFormat = localFormat)?.let {
    return it
}

return ""}

相关问题