首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将DateComponents对象转换为本地化字符串,如"08:40 PM",而不指定年份、月份和日期?

如何将DateComponents对象转换为本地化字符串,如"08:40 PM",而不指定年份、月份和日期?
EN

Stack Overflow用户
提问于 2017-02-01 21:12:29
回答 2查看 1.9K关注 0票数 1

我有一个“时间”(小时和分钟)存储在一个DateComponents-object中,我喜欢将它转换成本地化的字符串格式,比如08:40 PM,och 20:40等等。

现在我如何以这种方式显示日期对象(NSDAte),但是要将20:40转换为一个日期,我必须假装我知道年份、月份和日期。

问题:是否可以通过使用时区和地区对象将DateComponents-对象转换为本地化字符串,例如"08:40 PM",但不指定年份、月份和日期?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 22:10:16

您只需获得今天的组件并将所需的时间添加到其中。您还需要指定一个日历:

代码语言:javascript
运行
复制
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) }
}
代码语言:javascript
运行
复制
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
    }
}
代码语言:javascript
运行
复制
let date = DateComponents(hour: 20, minute: 40).todaysDateFromTimeComponents // "Feb 1, 2017, 8:40 PM"

如果要显示“给定时区中的日期信息”,则应使用DateFormatter格式化日期。

代码语言:javascript
运行
复制
extension DateFormatter {
    convenience init(timeStyle: DateFormatter.Style) {
        self.init()
        self.timeStyle = timeStyle
    }
}
代码语言:javascript
运行
复制
extension Date {
    static let shortTimeFormatter = DateFormatter(timeStyle: .short)
    func shortTime(with timeZone: TimeZone) -> String {
        Date.shortTimeFormatter.timeZone = timeZone
        return Date.shortTimeFormatter.string(from: self)
    }
}
代码语言:javascript
运行
复制
date?.shortTime(with: TimeZone(identifier: "GMT")!)   // 10:40 PM +2hs
票数 2
EN

Stack Overflow用户

发布于 2017-02-01 21:29:47

获得本地化日期字符串的唯一方法是将DateDateFormatter一起使用。所以你必须做的就是从日期组件中创建一个日期。我们可以使用用户的当前日历来完成这个任务。一旦我们有了日期,就用您想要显示的样式设置日期格式化程序;默认情况下,它应该使用用户的区域设置。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41989838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档