我目前正在以分钟格式保存一些带时间戳的数据,例如550是上午9:10。
有没有一种方法可以将其转换为字符串";09:10";?我将使用24小时制。
我在iOS应用程序中使用swift,但如果有非语言特定的逻辑,那也会很有帮助。
干杯,Josh
问题是550真正代表的是什么:
-
如果它表示以分钟为单位的抽象时间间隔,您可能会将其转换为
TimeInterval
,然后使用DateComponentsFormatter
来准备小时和分钟的字符串表示:let timeInterval = TimeInterval(minutes * 60) let formatter = DateComponentsFormatter() formatter.allowedUnits = [.hour, .minute] formatter.unitsStyle = .positional formatter.zeroFormattingBehavior = .pad let string = formatter.string(from: timeInterval)
这是一个简单的"小时和分钟"表示。如果小时数可能超过24(例如,1550分钟是25小时50分钟,或1天1小时50分钟(取决于是否将.day
添加到allowedUnits
(,则此模式特别有用。
-
但是,如果您的意思是550分钟实际上代表一天中的时间,那么您可以使用日历日期计算,并使用
DateFormatter
作为时间的字符串表示:let timeInterval = TimeInterval(minutes * 60) let date = Calendar.current.startOfDay(for: Date()).addingTimeInterval(timeInterval) let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.dateFormat = "HH:mm" let string = formatter.string(from: date)
但是,话虽如此,如果这真的代表上午9:10(而不是9小时10分钟的抽象时间间隔(,并且你想在UI中显示它,你通常会遵守设备的首选时间格式(上午/下午或24小时时钟(:
let timeInterval = TimeInterval(minutes * 60) let date = Calendar.current.startOfDay(for: Date()).addingTimeInterval(timeInterval) let formatter = DateFormatter() formatter.timeStyle = .short formatter.dateStyle = .none let string = formatter.string(from: date)
不过,无论哪种方式(强制24小时制或尊重用户的偏好(,你实际上都在显示一天中的时间,这意味着,虽然一年中的大多数日子都是上午9:10,但如果你在我们开始夏令时的那一天这样做,它会说上午10:10,但当我们倒退到当天的标准时间时,它会是上午8:10。
很明显,Objective-C中的语法与Swift中的语法不同,但基本的API是相同的(尽管您显然会使用NS
前缀,例如NSDateComponentsFormatter
和/或NSDateFormatter
(。