当前位置: 首页 > 面试题库 >

如何获取用户的时区?

储嘉悦
2023-03-14
问题内容

有人知道在Swift中获取用户时区的方法吗?

我正在从数据库中取出电视上的特定时间,然后需要从它们所在的位置减去/添加,以显示它们的正确时间。


问题答案:

编辑/更新:

Xcode 8或更高版本•Swift 3或更高版本

var secondsFromGMT: Int { return TimeZone.current.secondsFromGMT() }
secondsFromGMT  // -7200

如果需要缩写:

var localTimeZoneAbbreviation: String { return TimeZone.current.abbreviation() ?? "" }
localTimeZoneAbbreviation   // "GMT-2"

如果您需要时区标识符:

var localTimeZoneIdentifier: String { return TimeZone.current.identifier }

localTimeZoneIdentifier // "America/Sao_Paulo"

要了解所有可用的时区缩写:

var timeZoneAbbreviations: [String:String] { return TimeZone.abbreviationDictionary }
timeZoneAbbreviations   // ["CEST": "Europe/Paris", "WEST": "Europe/Lisbon", "CDT": "America/Chicago", "EET": "Europe/Istanbul", "BRST": "America/Sao_Paulo", "EEST": "Europe/Istanbul", "CET": "Europe/Paris", "MSD": "Europe/Moscow", "MST": "America/Denver", "KST": "Asia/Seoul", "PET": "America/Lima", "NZDT": "Pacific/Auckland", "CLT": "America/Santiago", "HST": "Pacific/Honolulu", "MDT": "America/Denver", "NZST": "Pacific/Auckland", "COT": "America/Bogota", "CST": "America/Chicago", "SGT": "Asia/Singapore", "CAT": "Africa/Harare", "BRT": "America/Sao_Paulo", "WET": "Europe/Lisbon", "IST": "Asia/Calcutta", "HKT": "Asia/Hong_Kong", "GST": "Asia/Dubai", "EDT": "America/New_York", "WIT": "Asia/Jakarta", "UTC": "UTC", "JST": "Asia/Tokyo", "IRST": "Asia/Tehran", "PHT": "Asia/Manila", "AKDT": "America/Juneau", "BST": "Europe/London", "PST": "America/Los_Angeles", "ART": "America/Argentina/Buenos_Aires", "PDT": "America/Los_Angeles", "WAT": "Africa/Lagos", "EST": "America/New_York", "BDT": "Asia/Dhaka", "CLST": "America/Santiago", "AKST": "America/Juneau", "ADT": "America/Halifax", "AST": "America/Halifax", "PKT": "Asia/Karachi", "GMT": "GMT", "ICT": "Asia/Bangkok", "MSK": "Europe/Moscow", "EAT": "Africa/Addis_Ababa"]

要了解所有可用的时区名称(标识符):

var timeZoneIdentifiers: [String] { return TimeZone.knownTimeZoneIdentifiers }
timeZoneIdentifiers           // ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", …, "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis"]

您可能还需要一些其他信息:

var isDaylightSavingTime: Bool { return TimeZone.current.isDaylightSavingTime(for: Date()) }
print(isDaylightSavingTime) // true (in effect)

var daylightSavingTimeOffset: TimeInterval { return TimeZone.current.daylightSavingTimeOffset() }
print(daylightSavingTimeOffset)  // 3600 seconds (1 hour - daylight savings time)


var nextDaylightSavingTimeTransition: Date? { return TimeZone.current.nextDaylightSavingTimeTransition }    //  "Feb 18, 2017, 11:00 PM"
 print(nextDaylightSavingTimeTransition?.description(with: .current) ?? "none")
nextDaylightSavingTimeTransition   // "Saturday, February 18, 2017 at 11:00:00 PM Brasilia Standard Time\n"

var nextDaylightSavingTimeTransitionAfterNext: Date? {
    guard
        let nextDaylightSavingTimeTransition = nextDaylightSavingTimeTransition
        else { return nil }
    return TimeZone.current.nextDaylightSavingTimeTransition(after: nextDaylightSavingTimeTransition)
}

nextDaylightSavingTimeTransitionAfterNext  //   "Oct 15, 2017, 1:00 AM"

TimeZone-
Apple开发人员Swift文档



 类似资料:
  • 问题内容: 哪个是最好的方法?php或javascript。有人可以向我提供一些摘要吗?谢谢。 问题答案: 这将使您的时区成为PHP变量。我使用jQuery和PHP编写了一个函数。经过测试,可以正常工作! 在您希望将时区作为变量的PHP页面上,将此代码段放在页面顶部附近: 这将读取我们现在将要创建的会话变量“时间”。 在同一页面的该部分中,首先需要包括jQuery: 同样在本节中,粘贴此jQuer

  • 我正在使用OneSignal向我的Android应用程序中的用户发送通知。目前,我可以使用idsAvailable()获取playerID/deviceID,并向该用户发送通知。

  • 问题内容: 我想知道是否有一种方法可以从客户端自动检索用户的时区。特别是在登录期间。 我尝试将其添加到登录页面中(使用): 然后将其添加到登录表单中 但始终是服务器的时区。 问题答案: 从文档中: 选择当前时区 当前时区相当于当前翻译的语言环境。但是,没有等效的Django可用来自动确定用户时区的Accept-Language HTTP标头。相反,Django提供了时区选择功能。使用它们来构建对您

  • 问题内容: 在我的控制器中,当我需要活动(登录)用户时,我正在执行以下操作以获取UserDetails实现: 它工作正常,但我认为Spring在这种情况下可以使生活更轻松。有没有办法将自动接线连接到控制器或方法中? 例如,类似: 但是我得到了,而不是得到了? 我正在寻找一种优雅的解决方案。有任何想法吗? 问题答案: 序言:从Spring-Security 3.2开始,此答案的末尾描述了一个不错的注

  • 问题内容: 可能重复: 如何确定网络用户的时区? 哪个是最好的方法?php或javascript。有人可以向我提供一些摘要吗?谢谢。 问题答案: 这将使您的时区成为PHP变量。我使用jQuery和PHP编写了一个函数。经过测试,可以正常工作! 在您希望将时区作为变量的PHP页面上,将此代码段放在页面顶部附近: 这将读取我们现在将要创建的会话变量“时间”。 在同一页面的该部分中,首先需要包括jQue

  • 问题内容: 我正在使用Zend_Framework编写一个应用程序(因此解决方案可以依靠它)。 如何获得客户的时区? 例如,如果有人在俄罗斯莫斯科,我想得到3 * 60 * 60(因为有UTC + 3)。如果他在英国,我要零。如果他使用UTC-3:30(加拿大?),我要-3.5 * 60 * 60。 (这不是格式的问题-我可以在俄罗斯圣彼得堡获得’Europe / Moscow’或’UTC-3’,