74 lines
2.4 KiB
Kotlin
74 lines
2.4 KiB
Kotlin
package com.lizongying.mytv
|
|
|
|
import android.content.res.Resources
|
|
import android.util.TypedValue
|
|
import com.google.gson.Gson
|
|
import com.lizongying.mytv.api.TimeResponse
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.withContext
|
|
import java.io.IOException
|
|
import java.text.SimpleDateFormat
|
|
import java.util.Date
|
|
import java.util.Locale
|
|
|
|
object Utils {
|
|
private var between: Long = 0
|
|
|
|
fun getDateFormat(format: String): String {
|
|
return SimpleDateFormat(
|
|
format,
|
|
Locale.CHINA
|
|
).format(Date(System.currentTimeMillis() - between))
|
|
}
|
|
|
|
fun getDateTimestamp(): Long {
|
|
return (System.currentTimeMillis() - between) / 1000
|
|
}
|
|
|
|
suspend fun init() {
|
|
var currentTimeMillis: Long = 0
|
|
try {
|
|
currentTimeMillis = getTimestampFromServer()
|
|
} catch (e: Exception) {
|
|
println("Failed to retrieve timestamp from server: ${e.message}")
|
|
}
|
|
between = System.currentTimeMillis() - currentTimeMillis
|
|
}
|
|
|
|
/**
|
|
* 从服务器获取时间戳
|
|
* @return Long 时间戳
|
|
*/
|
|
private suspend fun getTimestampFromServer(): Long {
|
|
return withContext(Dispatchers.IO) {
|
|
val client = okhttp3.OkHttpClient.Builder()
|
|
.connectTimeout(500, java.util.concurrent.TimeUnit.MILLISECONDS)
|
|
.readTimeout(1, java.util.concurrent.TimeUnit.SECONDS).build()
|
|
val request = okhttp3.Request.Builder()
|
|
.url("https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp")
|
|
.build()
|
|
try {
|
|
client.newCall(request).execute().use { response ->
|
|
if (!response.isSuccessful) throw IOException("Unexpected code $response")
|
|
val string = response.body()?.string()
|
|
Gson().fromJson(string, TimeResponse::class.java).data.t.toLong()
|
|
}
|
|
} catch (e: IOException) {
|
|
// Handle network errors
|
|
throw IOException("Error during network request", e)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun dpToPx(dp: Float): Int {
|
|
return TypedValue.applyDimension(
|
|
TypedValue.COMPLEX_UNIT_DIP, dp, Resources.getSystem().displayMetrics
|
|
).toInt()
|
|
}
|
|
|
|
fun dpToPx(dp: Int): Int {
|
|
return TypedValue.applyDimension(
|
|
TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), Resources.getSystem().displayMetrics
|
|
).toInt()
|
|
}
|
|
} |