NSDate设置swift中的时区
如何从字符串返回预定义时区中的NSDateNSDate设置swift中的时区,swift,nsdate,Swift,Nsdate,如何从字符串返回预定义时区中的NSDate let responseString = "2015-8-17 GMT+05:30" var dFormatter = NSDateFormatter() dFormatter.dateFormat = "yyyy-M-dd ZZZZ" var serverTime = dFormatter.dateFromString(responseString) println("NSDate : \(serverTime!)") 上面的代码将时间返回为 20
let responseString = "2015-8-17 GMT+05:30"
var dFormatter = NSDateFormatter()
dFormatter.dateFormat = "yyyy-M-dd ZZZZ"
var serverTime = dFormatter.dateFromString(responseString)
println("NSDate : \(serverTime!)")
上面的代码将时间返回为
2015-08-16 18:30:00 +0000
日期格式必须指定给日期格式化程序的dateFormat属性
let date = NSDate.date()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let str = dateFormatter.stringFromDate(date)
println(str)
这将使用设备上的默认时区打印日期。仅当您希望根据不同的时区输出时,您才会添加例如
斯威夫特3*
dateFormatter.timeZone = NSTimeZone(name: "UTC")
斯威夫特4*
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
另请参阅链接
如何返回预定义时区中的NSDate
你不能
NSDate
的实例不包含任何关于时区或日历的信息。它只是简单地确定了宇宙时间中的一个点
您可以在任意日历中解释此NSDate
对象。Swift的字符串插值(示例代码的最后一行)使用使用UTC的NSDateFormatter
(即输出中的“+0000”)
如果您想在当前用户的日历中将NSDate
的值作为字符串,则必须为此明确设置日期格式化程序。Swift 4.0
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
无论使用何种语言,数字1都表示1。然而在英语中它的拼写是“一”,在西班牙语中它的拼写是“乌纳”,在阿拉伯语中它的拼写是“瓦希德”,等等 同样地,1970年的123982373秒将以不同的时区或日历格式反映出来,但仍然是1970年的123982373秒
3秒和7秒之间的差值是4秒。这不需要日历。您也不需要日历/时区来了解这两个158542200和1584729000之间的时间差 日期仅为1970年1月1日(UTC/GMT午夜)的时间间隔。日期也碰巧有字符串表示形式 重复Nikolia的回答,Swift的默认字符串插值(
2015-08-16 18:30:00+0000
)使用使用UTC的日期格式化程序(即输出中的“+0000”)
使用时区的日历为我们提供了一种上下文表示,它比计算两个巨大数字之间的差值更容易理解
意味着一个日期(想想1970年以来的一个时间间隔)每个日历将有不同的字符串解释。除此之外,日历本身也会因时区而异
我强烈建议您仔细研究一下,看看选择不同的时区将如何改变相同时刻/日期/时间间隔的字符串表示形式
我也建议去看看。主要包括这一部分: 时区只是时间戳字符串的修正,日期格式化程序不考虑它
考虑时区,必须设置格式化程序
的时区dateFormatter.timeZone=时区(secondsFromGMT:-14400)
如果输入字符串始终具有相同的时区,则可以创建两个日期格式化程序以输出本地时区(或指定的时区):
为什么返回的日期与字符串不同。我是否可以将字符串作为NSDate返回,而不使用任何alterations@MugunthanBalakrishnan正如我试图解释的那样:
日期
不包含关于时区的信息。因此,返回的日期与您提供的字符串没有区别,只是以UTC表示。当您使用时区设置为“GMT+05:30”的日期格式化程序时,它将返回与您用于输入的字符串值完全相同的字符串值。
let timeFormatterGet = DateFormatter()
timeFormatterGet.dateFormat = "h:mm a"
timeFormatterGet.timeZone = TimeZone(abbreviation: "PST")
let timeFormatterPrint = DateFormatter()
timeFormatterPrint.dateFormat = "h:mm a"
// timeFormatterPrint.timeZone = TimeZone(abbreviation: "EST") // if you want to specify timezone for output, otherwise leave this line blank and it will default to devices timezone
if let date = timeFormatterGet.date(from: "3:30 PM") {
print(timeFormatterPrint.string(from: date)). // "6:30 PM" if device in EST
} else {
print("There was an error decoding the string")
}