首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDate:将UTC值转换为军事时区值

NSDate:将UTC值转换为军事时区值
EN

Stack Overflow用户
提问于 2015-12-27 04:26:11
回答 2查看 303关注 0票数 1

军事日期和时间的书写方式,也称为军事日期时间组或DTG,有以下格式:

敌百虫

其中DD =日

HH =小时(24小时)

毫米=分钟

Z=军事时区

MON =月份

YY =年份

例如:2015年12月27日,05:48 +0200将以军事形式:

270548BDEC 15

B等于UTC+2 (+0200) (世界协调时和相应的军事时区见http://www.timeanddate.com/time/zones/military )

我正在尝试完成这种军事风格/格式,目前我在Swift中有以下内容:

代码语言:javascript
复制
let StartDTG = NSDate()
let StartDTGDateFormatter = NSDateFormatter()

StartDTGDateFormatter.dateFormat = "ddkkmmZZZLLLyy"

let tempConvertedTAStartDTG = StartDTGDateFormatter.stringFromDate(StartDTG)

let UpperCaseTAStartDTG = tempConvertedTAStartDTG.uppercaseString

TAStartDTG.text = String(UpperCaseTAStartDTG)

此代码将获取当前日期和时间,并将其显示在文本字段中如下所示:

代码语言:javascript
复制
270548+0200DEC15 

问:我如何转换ZZZ-值来表示等价的军事价值,以使我能够得到这个值?

270548BDEC15

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-27 06:01:06

您可以使用自定义键和值创建字典,只需获取时区属性secondsFromGMT,再将其除以3600以小时为单位获得偏移量,并将其用作字典键以获得对应的时区值:

代码语言:javascript
复制
extension NSDate {
    struct Date {
        static let militaryZones: [Int:String] = {
            return [-12: "Y", -11: "X", -10: "W", -9: "V", -8: "U", -7: "T", -6: "S", -05: "R", -4: "Q", -3: "P", -2: "O", -1: "N", 0: "Z", 1: "A", 2: "B", 3: "C", 4: "D", 5: "E", 6: "F", 7: "G", 8: "H", 9: "I", 10: "K", 11: "L", 12: "M"]}()
        static let formatterMilitary: NSDateFormatter = {
            let formatter = NSDateFormatter()
            formatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)
            formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
            formatter.dateFormat = "ddkkmm LLLyy"
            return formatter
        }()
    }
    var militaryTimeZone: String {
        return Date.militaryZones[NSTimeZone.localTimeZone().secondsFromGMT/3600] ?? ""
    }
    var militaryTime: String {
        return Date.formatterMilitary.stringFromDate(self)
            .componentsSeparatedByString(" ")
            .joinWithSeparator(militaryTimeZone)
            .uppercaseString
    }
}
NSDate().militaryTime      // "270455ODEC15"
NSDate().militaryTimeZone  // "O"
票数 1
EN

Stack Overflow用户

发布于 2015-12-27 05:22:32

我说得很快,口吃,但我的建议是使用标准格式.

代码语言:javascript
复制
StartDTGDateFormatter.dateFormat = "ddkkmm X LLLyy"

..。"X“号距格林尼治时间+00...+12,-01.-11小时。这些空格将有助于解析..。

代码语言:javascript
复制
let UpperCaseTAStartDTG = tempConvertedTAStartDTG.uppercaseString
let components = UpperCaseTAStartDTG.componentsSeparatedByString(" ")

..。会提供这样的数组。

代码语言:javascript
复制
(
    262050,
    "-08",  // California, USA
    DEC15
)

...the标准位,从格林尼治时间到标准位的剩余时间。开发一个函数应该是直截了当的,它接受数组的第二个元素并回答军事区域。

注意,数组响应于componentsJoinedByString(),所以应该很容易将它放在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34477551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档