我是iOS开发新手,我以前习惯使用的Android开发人员有一个对象,可以使用给定时区保存日期时间(来自Joda-Time库)。
在阅读关于日期和时间(https://developer.apple.com/documentation/foundation/dates_and_times)的iOS文档后,我仍然怀疑应该使用哪个类来保存日期时间。给定-----------------------
Fragments len: 0 // Correct (this is first fragment so nothing is in map)
key>192.168.1.3 192.168.1.4 6 1
Not Found // So it's added into map
-----------------------
Fragments len: 1 // Correct (1st fragment is in map)
key>192.168.1.5 192.168.1.6 6 1
Found // Not correct...keys are different
-----------------------
Fragments len: 1
key>192.168.1.5 192.168.1.6 6 1
Found
-----------------------
Fragments len: 1
key>192.168.1.5 192.168.1.6 6 1
Found
-----------------------
类描述"特定时间点,独立于任何日历或时区。"它似乎非常无用,因为它是独立于时区的,没有时区的时间没有任何意义,因为它没有任何背景。
我的真正问题(TL; DR):
我有一个数据库,其日期时间以UTC格式存储,如" yyyy-MM-dd hh:mm:ss" 。我想初始化一个带有某种DateFormatter的对象(带有这种格式的字符串" yyyy-MM-dd hh:mm:ss")加上一个时区(UTC)可以轻松转换为我想要的任何时区(向用户显示其默认时区时间)。我怎样才能在iOS中实现这一目标?
编辑:想象一下,我有一个带有标题和开始时间的课程。标题是一个字符串,应该是什么开始时间?
答案 0 :(得分:1)
您可以使用DateFormatter
。
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale
设置用户的当前区域设置,formatter.dateFormat
设置所需的日期格式。在您的情况下yyyy-MM-dd HH:mm:ss
。
简单地称呼它:
let utcDateFromServer = "2017-01-01 22:10:10"
let date = formatter.date(from: utcDateFromServer)
答案 1 :(得分:0)
Date
是一个时间点,正如其他评论&在文档中。
如果您想将UTC时间转换为当地时间,则需要先使用String
将数据库中的"yyyy-MM-dd hh:mm:ss"
Date
转换为DateFormatter
。
let dateStringUTC = "2018-01-01 00:00:00"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
//Set the input timezone (if you don't set anything, the default is user's local time)
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let date : Date = dateFormatter.date(from: dateStringUTC)!
然后使用Date
将String
转换回DateFormatter
TimeZone
let outputDateFormatter = DateFormatter()
outputDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
//Set the output timezone (if you don't set anything, the default is user's local time)
//outputDateFormatter.timeZone = someTimeZone
let dateString = outputDateFormatter.string(from: date)
print(dateString)
输出:2017-12-31 17:00:00
你可以改变输入和输出时区来做相反的事情。