我有一个“时间”(小时和分钟)存储在一个DateComponents-object中,我喜欢将它转换成本地化的字符串格式,比如08:40 PM,och 20:40等等。
现在我如何以这种方式显示日期对象(NSDAte),但是要将20:40转换为一个日期,我必须假装我知道年份、月份和日期。
问题:是否可以通过使用时区和地区对象将DateComponents-对象转换为本地化字符串,例如"08:40 PM",但不指定年份、月份和日期?
发布于 2017-02-01 22:10:16
您只需获得今天的组件并将所需的时间添加到其中。您还需要指定一个日历:
extension Date {
var year: Int { Calendar.current.component(.year, from: self) }
var month: Int { Calendar.current.component(.month, from: self) }
var day: Int { Calendar.current.component(.day, from: self) }
}
extension DateComponents {
var todaysDateFromTimeComponents: Date? {
let today = Date()
return DateComponents(calendar: .current,
year: today.year,
month: today.month,
day: today.day,
hour: hour,
minute: minute)
.date
}
}
let date = DateComponents(hour: 20, minute: 40).todaysDateFromTimeComponents // "Feb 1, 2017, 8:40 PM"
如果要显示“给定时区中的日期信息”,则应使用DateFormatter格式化日期。
extension DateFormatter {
convenience init(timeStyle: DateFormatter.Style) {
self.init()
self.timeStyle = timeStyle
}
}
extension Date {
static let shortTimeFormatter = DateFormatter(timeStyle: .short)
func shortTime(with timeZone: TimeZone) -> String {
Date.shortTimeFormatter.timeZone = timeZone
return Date.shortTimeFormatter.string(from: self)
}
}
date?.shortTime(with: TimeZone(identifier: "GMT")!) // 10:40 PM +2hs
发布于 2017-02-01 21:29:47
获得本地化日期字符串的唯一方法是将Date
与DateFormatter
一起使用。所以你必须做的就是从日期组件中创建一个日期。我们可以使用用户的当前日历来完成这个任务。一旦我们有了日期,就用您想要显示的样式设置日期格式化程序;默认情况下,它应该使用用户的区域设置。
var dateComponents = DateComponents()
dateComponents.hour = 20
dateComponents.minute = 40
let date = Calendar.current.date(from: dateComponents)
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .short
print(dateFormatter.string(from: date!)) // 8:40 PM
https://stackoverflow.com/questions/41989838
复制相似问题