军事日期和时间的书写方式,也称为军事日期时间组或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中有以下内容:
let StartDTG = NSDate()
let StartDTGDateFormatter = NSDateFormatter()
StartDTGDateFormatter.dateFormat = "ddkkmmZZZLLLyy"
let tempConvertedTAStartDTG = StartDTGDateFormatter.stringFromDate(StartDTG)
let UpperCaseTAStartDTG = tempConvertedTAStartDTG.uppercaseString
TAStartDTG.text = String(UpperCaseTAStartDTG)此代码将获取当前日期和时间,并将其显示在文本字段中如下所示:
270548+0200DEC15 问:我如何转换ZZZ-值来表示等价的军事价值,以使我能够得到这个值?
270548BDEC15
发布于 2015-12-27 06:01:06
您可以使用自定义键和值创建字典,只需获取时区属性secondsFromGMT,再将其除以3600以小时为单位获得偏移量,并将其用作字典键以获得对应的时区值:
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"发布于 2015-12-27 05:22:32
我说得很快,口吃,但我的建议是使用标准格式.
StartDTGDateFormatter.dateFormat = "ddkkmm X LLLyy"..。"X“号距格林尼治时间+00...+12,-01.-11小时。这些空格将有助于解析..。
let UpperCaseTAStartDTG = tempConvertedTAStartDTG.uppercaseString
let components = UpperCaseTAStartDTG.componentsSeparatedByString(" ")..。会提供这样的数组。
(
262050,
"-08", // California, USA
DEC15
)...the标准位,从格林尼治时间到标准位的剩余时间。开发一个函数应该是直截了当的,它接受数组的第二个元素并回答军事区域。
注意,数组响应于componentsJoinedByString(),所以应该很容易将它放在一起。
https://stackoverflow.com/questions/34477551
复制相似问题