【发布时间】:2017-05-24 02:38:23
【问题描述】:
我拼命想了解 swift 的 DatePicker。我需要选择从 Julian Day 0 (11/24/4714 BCE) 到未来日期的日期。当我从 DatePicker 中提取 DateComponents 时,它们似乎不是一个“预测”的公历。例如,通过选择 3/1/300 AD(或 CE),月份和日期为 2/29。这似乎与儒略历一致,这是我无法在 DatePicker 的日历设置为 iso8601 或公历时选择的日期。我熟悉公历的采用日期,实际上这就是差异开始的地方。但是为什么它不计算预兆日期,或者我误解了这一点。提取这些组件对于计算各种数量(例如儒略日或从一个日历转换为另一个日历)是必要的。即使是关于在哪里可以找到信息的建议也将不胜感激。
---编辑显示代码-----
@IBAction func calculate(_ sender: Any) {
var mycal = Calendar(identifier: .iso8601)
//var mycal = Calendar(identifier: .gregorian)
let picked_date:Date = datePicker.dateValue
let formatter1 = DateFormatter()
formatter1.locale = Locale(identifier: "en_US_POSIX")
formatter1.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let picked_format = formatter1.string(from: picked_date)
//print("picked_format: \(picked_format)")
let format_date = formatter1.date(from: picked_format)
var tz: String { return TimeZone.current.identifier }
let myzone = UTC.state == NSOnState ? tz : "GMT"
//let era = AD.state == NSOnState ? 1 : 0
mycal.timeZone = TimeZone(identifier: myzone)!
var comps = mycal.dateComponents([.year,
.month,
.day,
.hour,
.minute,
.second,
//.era,
//.nanosecond,
.timeZone],
from: format_date!)
print(comps.month!)
print(comps.day!)
【问题讨论】:
-
1) 这与 swift 无关。 2)你读过文档吗? developer.apple.com/library/content/documentation/…
-
是的,我已经阅读了文档,至少是我能找到的那些。我知道 10 天已从公历中“删除”。这让我相信你要么不能从 10/6/1582 -10/14/1582 中选择日期(这似乎不是这种情况),要么日历会使用相同的公历规则从 1582 年 10 月 15 日开始向后继续我们都习惯了。这似乎也不是这样。是的,我想回想起来,这更像是 Cocoa 的事情:我使用的是 MacOS 日期选择器,而不是 iOS 的,尽管我怀疑它们的行为相似。
-
感谢 Maddy 编辑标签和标题。
-
NSDatePicker不计算天数,您不能从日期选择器中提取 DateComponents。日期选择器的日历是什么,您使用哪个日历来提取日期组件?
标签: macos datepicker julian-date nsdatepicker