我想知道为什么Kotlin JavaScript Date
类为getTime
函数返回Double。根据{{3}},getTime
函数应返回自1970年1月1日00:00:00 UTC以来的毫秒数。
我知道JS没有64位数字表示,但是自从Kotlin documentation我认为Date.now()
和Date().getTime()
返回的值应该是Long。至少,返回Int。
有没有理由它返回Double而不是整数?
答案 0 :(得分:2)
有两个不同的原因:一致性和性能。 但在我进入之前请注意,您可以通过扩展轻松获得所需的行为,例如:
inline val Date.time get() = getTime().toLong()
println(Date().time) // 1522757176433
一致性。正如您在日期documentation page中看到的那样,它是external类。这意味着它只描述了现有的JavaScript API。重复使用它是一个很好的设计决策吗?也许不吧。但它有一个JS人们熟悉的好处。更改单个函数的返回类型会破坏整个API并使整个API非常不一致。
性能。可以隐藏原始getTime
并创建辅助函数。但请记住,为了模仿Long Kotlin创建一个具有2个数字的对象。创建,比较,二进制操作,存储 - 模拟Long的执行比本机JS数字差很多。
总结。更改返回类型会使API不一致且效率低下。如果您重视语义而不是性能,那么只需编写一些辅助函数。
P.S。我认为Date API将在某些时候重新设计,以便在多平台项目中使用它。但这是另一个故事。
答案 1 :(得分:0)
在kotlin中使用日期()。时间。它将返回您将获得整数的长值
val s= Date().time
print(s)
例如
val date = "01-02-2018 07:05:00.999"
val fmt = SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S") //parse date based your format
var myDate: Date? = null
try {
myDate = fmt.parse(date)
} catch (e: ParseException) {
e.printStackTrace()
}
println(myDate)
val timestamp = myDate!!.time //timestamp values in long only not double
println(timestamp)