【发布时间】:2017-03-14 21:31:11
【问题描述】:
我尝试连接两个整数值(当前小时和当前分钟)。 例如:
int1: 18
int2: 2
然后我希望它们是一个整数:182。
我使用此代码获取当前小时和当前分钟:
// get the current date and time
let currentDateTime = Date()
// get the user's calendar
let userCalendar = Calendar.current
// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second
]
// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)
// now the components are available
let dtHour = dateTimeComponents.hour
let dtMinute = dateTimeComponents.minute
然后我认为我可以将这两个整数转换为字符串而不是返回 int 时将它们连接起来,这样我就有了大的 int 值。我用以下几行完成了这项工作:
let strHour = String(describing: dtHour)
let strMinute = String(describing: dtMinute)
var currenttime : String = strHour
currenttime += strMinute
//reconvert to int
let ct: Int? = Int(currenttime)
print("currentTime as Int : ", ct)
print("currenttime as String: ", currenttime)
第一次打印的输出是:
currentTime as Int : nil
第二次打印的输出是:
当前时间作为字符串:可选(18)可选(2)
是的,我知道如果当前分钟小于十分钟,我必须解决分钟问题,我必须首先插入零,但我不明白为什么我不能将字符串转换回 int 所以它是一个大字符串。
那么有没有一种正确的方法来连接两个整数,然后将它们重新转换回一个大的 int 值?
【问题讨论】:
-
DateComponents的所有属性都是可选的,比较stackoverflow.com/questions/40362516/…。 -
备注:使用
String(describing:)通常是错误的解决方案。它使您的代码编译,但结果不是您真正想要的。 -
当然你不需要任何字符串转换:
let ct = dateTimeComponents.hour! * 100 + dateTimeComponents.minute! -
我建议您重新考虑将连接值转换为整数。它不是一个数字:它是一个数字序列。只需将其保留为字符串即可。
-
@MartinR 我有点怀疑 OP 是否知道他自己想要的格式,但请注意,使用固定乘数
100几个小时会产生一种不同于 OP 分钟的格式范围0..<10;例如1802用于 OP 示例,而不是182。
标签: swift