有什么简单的方法可以像我们在 Oracle 数据库中那样截断日期吗?
例如,我需要从午夜开始设置值。在 Oracle 中,我可以执行 TRUNC(SYSDATE)。但是我在 Swift 中看不到类似的方法。
我检查了 StackOverflow,看到了一些 DateFormatter 的例子,Date Components 将 Date 转换为 String。我也看过this question ,但不明白如何处理日期(不是 NSDate)类型和我
但我不需要字符串值。我想避免转换为字符串并返回日期。我只想获得三个值:
当前日期的开始(就像我们在 Oracle 中做 TRUNC(SYSDATE) 一样)
月初(就像我们在 Oracle 中执行 TRUNC(SYSDATE, 'MONTH') 一样)
年初(就像我们在 Oracle 中执行 TRUNC(SYSDATE, 'YEAR') 一样)
我试过这个,但它不会在午夜返回:
let comp: DateComponents = Calendar.current.dateComponents([.year, .month, .day], from: Date())
let truncated = Calendar.current.date(from: comp)!
我该怎么办?
最佳答案
请注意 +0000
在您的样本中的时间结束时。
一天的开始在哪里?我更新了示例以显示您想要的内容。
var comp: DateComponents = Calendar.current.dateComponents([.year, .month, .day], from: Date())
comp.timeZone = TimeZone(abbreviation: "UTC")!
let truncated = Calendar.current.date(from: comp)!
print(truncated)
它打印
2017-06-14 00:00:00 +0000
.再次注意末尾的 +0000。默认时区设置为当前时区,该时区中的小时、分钟和秒为 0。
我会假设你想要当前的时区。根据该规定,您的代码是正确的。
关于datetime - Swift 3 将日期截断为日/月/年开始的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554048/