我拼命想了解 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!)