Kotlin 处理Linux时间戳

思路

1. 获取时间

可以采用的方式有直接获取系统时间System.currentTimeMillis()或者使用Calendar类获取时间

2. 处理时间

  1. 在使用Calendar时,可以直接由Calendarset方法对于时间进行设置
  2. 由于Calendar的时间格式并不是我们希望得到的Linux时间戳格式,所以我们需要使用时间格式模板,通过生成与解析方法进行转换,得到最终的Linux时间戳的时间格式

注意

Calendar 的时间设置与北京时间相差八小时,当直接设置当前的小时数据时,需考虑到这一点

例:如果需要北京时间23:00:00,则需设置HOUR_OF_DAY = 15

问题

Kotlin在线编辑器中运行时,上面注意中的处理是没有问题的,会得到正确结果;而在Android中实际使用时,却应该使用标准的设置,即设置HOUR_OF_DAY = 23

造成这样结果的原因还不清楚,欢迎留言

实现

自己写了几种可能会常用的获取时间戳的函数,供大家直接使用,代码使用Kotlin实现

得到当前的时间戳

fun getCurrentTimeStamp(): String {
    var time = System.currentTimeMillis()
    var nowTimeStamp = (time / 1000).toString()
    return nowTimeStamp
}

得到前一小时的时间戳

fun getTimeStampAtOneHourAgo(): String {
    var calendar = Calendar.getInstance()
    calendar.setTimeInMillis(System.currentTimeMillis())
    calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1)
    var template = SimpleDateFormat("dd/MM/yyyy HH:mm:ss") // SimpleDateFormat
    var timeStr = template.format(calendar.time) // String
    return (template.parse(timeStr).time / 1000).toString()
}

得到当天23:59: 59 的时间戳

fun getTimeStampAtTheEndOfDay(): String  {
    var calendar = Calendar.getInstance()
    calendar.setTimeInMillis(System.currentTimeMillis())
    calendar.set(Calendar.HOUR_OF_DAY, 23)
    calendar .set(Calendar.MINUTE, 59)
    calendar.set(Calendar.SECOND, 59)
    calendar.set(Calendar.MILLISECOND, 59)

    var template = SimpleDateFormat("dd/MM/yyyy HH:mm:ss") // SimpleDateFormat
    var timeStr = template.format(calendar.time) // String
    return (template.parse(timeStr).time / 1000).toString()
}

传入时间字符串及模板,返回时间的模板字符串

fun string2Date(str: String, format: String): Date {
    try {
        return SimpleDateFormat(format).parse(str)
    } catch (e: ParseException) {
        e.printStackTrace()
    }
    return Date()
}

一个好用的在线Linux时间戳转换器

http://tool.chinaz.com/Tools/unixtime.aspx

更新时间

7/10/2018

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容