我目前正在以分钟格式保存带有时间戳的数据,例如550是上午9:10。
是否可以将其转换为字符串“ 09:10”?我将使用24小时格式。
我正在为iOS应用程序使用swift,但是如果存在非语言特定的逻辑,那也会有所帮助。
干杯, 乔什
答案 0 :(得分:1)
问题是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(例如1,550分钟为25小时50分钟,或1天,1小时50分钟,具体取决于您是否将.day
添加到{{1}),则此模式特别有用}或否。
但是,如果您真正的意思是550分钟旨在按字面表示一天中的时间,则可以使用日历日期计算,并使用DateFormatter
来表示时间:
allowedUnits
但是,话虽如此,如果这确实代表了上午9:10(而不是9小时10分钟的抽象时间间隔),并且您想在用户界面中显示它,则通常会兑现设备的首选时间格式(上午/下午或24小时制):
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)
无论哪种方式(强制24小时制或遵守用户的偏好),您实际上都在显示一天中的某个时间,这意味着,如果您在一天中的大多数时间上午9:10我们将日光节约的时间设为上午10:10,但是如果那天我们倒退到该天的标准时间,那将是上午8:10。
很明显,Objective-C中的语法与Swift中的语法不同,但是基本API相同(尽管您显然会使用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)
前缀,例如NS
和/或NSDateComponentsFormatter
。