Swift DateFormatter 提取时间

Posted

技术标签:

【中文标题】Swift DateFormatter 提取时间【英文标题】:Swift DateFormatter Extract Time 【发布时间】:2017-11-28 18:59:37 【问题描述】:

我一直在尝试返回仅包含时间的日期。我尝试了 DateFormatter,但由于某种原因总是会检索到完整的日期。

//Declare Date Formatter 1
let dateFormatter1 = DateFormatter()
    dateFormatter1.dateFormat = "yyyy-MM-dd HH:mm:ss"

//Declare Date Formatter 2
let dateFormatter2 = DateFormatter()
    dateFormatter2.dateFormat = "hh:mm"

//Retrieve date and set to proper date for DateFormatter
var date: Date = dateFormatter1.date(from: "2017-11-28 10:47:30")!

//Set String date to time format with dateFormatter2
let dateString = dateFormatter2.string(from: item)

           //Reseting dateFormatter1 for to only use time (could be ambiguous)
           dateFormatter1.dateFormat = "hh:mm"

           //Set date to Date
           date = dateFormatter1.date(from: dateString)!

    print("String: \(dateString)")
    print("Date: \(date)")

输出:

字符串:10:47

日期:2000-01-01 15:47:00 +0000 - timeIntervalSinceReferenceDate : -31565580.0

我希望日期:为 10:47 这甚至可能吗?

【问题讨论】:

您认为它对于您当前的语言环境是正确的。 +0000 表示 UTC 时间。您可以将日期属性描述与区域设置一起使用,而不是打印日期(使用 UTC 时区)。如果您打印它,您会发现您的日期是正确的date.description(with: .current) Date 是一个时刻。它不能只有日期信息或时间信息,它总是两者都有。只有Date 的字符串表示可以省略一个。 Date 由小时、分钟、日、月、年等组件组成。不能只是时间。如果您只有时间,它将显示默认的月份、年份和日期,如果您只有日期,它将显示默认时间 00:00:00。所以不用担心。 10:47 可以是使用 dateFormatter 的字符串,但不能是日期对象。 【参考方案1】:

不,这是不可能的。变量date 的类型为Date,其中包含完整的日期信息。当以字符串格式显示时,您可以根据需要进行转换,但在存储在 Date 类型的变量中时,它会存储完整信息。

【讨论】:

请添加一些标点符号等 - 这是一堵难以阅读的文字墙。 对不起兄弟@ADyson 没有必要道歉,我只是想改进你的答案。我已经为你改正了你其余的语法。现在更容易理解你在说什么。

以上是关于Swift DateFormatter 提取时间的主要内容,如果未能解决你的问题,请参考以下文章

DateFormatter 不转换特定日期 (Swift)

Swift:DateFormatter 返回 nil

在swift中使用DateFormatter时发生错误[重复]

在 Swift 3.1 中使用 DateFormatter 正确构建 dateFormat 以解析时间

DateFormatter 中的 Swift 语言错误? [复制]

Swift 5 - 无法解释的 DateFormatter 崩溃