我想将服务器UTC时间转换为本地时间,反之亦然。这是我的代码。
var isTimeFromServer = true
var time:String!
var period:String!
let timeString = "6:59 AM" //Current UTC time
if isTimeFromServer {
let index = timeString.index(timeString.startIndex, offsetBy: 5)
let twelve = timeString.substring(to: index)
var dateString:String!
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "H:mm"
let date12 = dateFormatter.date(from: twelve)!
dateFormatter.dateFormat = "h:mm a"
let date22 = dateFormatter.string(from: date12)
//print(date22)
dateString = date22
//print("dateString=\(dateString)")
time = dateString.components(separatedBy: " ")[0]
period = dateString.components(separatedBy: " ")[1]
}
else {
time = timeString.components(separatedBy: " ")[0]
period = timeString.components(separatedBy: " ")[1]
}
var hour = Int(time.components(separatedBy: ":")[0])
hour = period == "AM" ? hour : hour! + 12
let minute = Int(time.components(separatedBy: ":")[1])
let calender = NSCalendar.current
var datecomponent = DateComponents()
datecomponent.calendar = calender
datecomponent.hour = hour
datecomponent.minute = minute
if !isTimeFromServer {
// local to UTC
datecomponent.timeZone = TimeZone.current
}
else {
datecomponent.timeZone = TimeZone(abbreviation: "UTC")
}
let date = datecomponent.date
let dateFormatter = DateFormatter()
if !isTimeFromServer {
dateFormatter.dateFormat = "H:mm"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.string(from: date!)
}
else {
//UTC to local
dateFormatter.dateFormat = "h:mm a"
dateFormatter.timeZone = TimeZone.current
dateFormatter.string(from: date!)
}
我知道当地时间
o / p:“下午12:52”
但是实际的本地时间和输出时间相差23分钟。
我不知道您的代码有什么问题。
但是看起来有太多不必要的事情,就像您要设置日历,从字符串中获取某些元素一样。这是我的UTCToLocal和localToUTC函数的小版本。
但是为此,您需要以特定格式传递字符串。原因我已强制打开日期对象。但是您可以使用一些保护条件来防止应用程序崩溃。
func localToUTC(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "h:mm a"
dateFormatter.calendar = NSCalendar.current
dateFormatter.timeZone = TimeZone.current
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "H:mm:ss"
return dateFormatter.string(from: dt!)
}
func UTCToLocal(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "H:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = "h:mm a"
return dateFormatter.string(from: dt!)
}
然后像下面这样调用这些函数。
print(UTCToLocal(date: "13:07:00"))
print(localToUTC(date: "06:40 PM"))
希望这会帮助你。
编码愉快!!
问题内容: 我正在使用Android应用程序,并且要将本地时间(设备时间)转换为UTC并将其保存在数据库中。从数据库中检索它之后,我必须再次将其转换并显示在设备的时区中。谁能建议如何用Java做到这一点? 问题答案: 我使用这两种方法将本地时间转换为GMT / UTC,反之亦然,这对我来说没有任何问题。 将要转换为设备本地时间的GMT / UTC日期传递给此方法:
我正在开发Android应用程序,我想将本地时间(设备时间)转换为UTC,并将其保存在数据库中。从数据库中检索后,我必须再次将其转换并显示在设备的时区中。有人能建议如何在Java中做到这一点吗?
我正在开发Android应用程序,我想将用户选择的本地时间(设备时间)转换为UTC秒。之后,我必须再次转换并显示在设备的时区中。有人能建议在科特林如何做到这一点吗?
我想使用moment.js将本地时间转换为等价的UTC。我相信我已经有了正确的方法,但它不会改变时间。 我在悉尼,澳大利亚+11,预计协调世界时将早11个小时。 在moment对象内部,isUTC标志从false变为true,但时间没有改变,我是不是打算为此使用一种不同的技术。 转换后
我有一个Unix历元时间戳(以毫秒为单位),需要获取本地时间的日期字符串。 这是我的代码: 由上述函数生成的原始时间戳和结果日期、小时和所有其他值均以UTC为单位。如何更改代码以在当地时间获取它?
问题内容: 我有一个UTC时区,例如: 还有一个pytz时区对象: 转换为给定时区的正确方法是什么? 问题答案: 我想我明白了: 这行代码首先将朴素的(不了解时区的) 对象转换为包含时区(UTC)的对象。然后,它使用该功能根据请求的时区调整时间。