思路
1. 獲取時間
可以采用的方式有直接獲取系統時間System.currentTimeMillis()或者使用Calendar類獲取時間
2. 處理時間
在使用Calendar時,可以直接由Calendar的set方法對于時間進行設置
由于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時間戳轉換器
更新時間
7/10/2018