> 技术文档 > Android 中获取时间的几种方法_android 获取当前时间

Android 中获取时间的几种方法_android 获取当前时间

在Android开发中,有多种方法可以获取时间,以下是几种常见的方法:

1、使用System.currentTimeMillis()

这是最简单的一种获取时间的方法,它返回从1970年1月1日00:00:00 GMT(格林威治时间)开始到现在的毫秒数。

/** * 获取当前时间戳,单位毫秒 */ fun getCurrentTimeMillis() { val currentTimeMillis = System.currentTimeMillis() Log.d(TAG, \"[getCurrentTimeMillis] 当前时间戳(毫秒):$currentTimeMillis\") }

2、使用Calendar类

Calendar类提供了更灵活的时间操作功能,可以获取和设置日期和时间的各个组成部分。

val calendar = Calendar.getInstance() // 获取具体的年、月、日、时、分、秒、星期 val year = calendar.get(Calendar.YEAR) // 月份从 0 开始 val month = calendar.get(Calendar.MONTH) + 1 val day = calendar.get(Calendar.DAY_OF_MONTH) val hour = calendar.get(Calendar.HOUR_OF_DAY) val minute = calendar.get(Calendar.MINUTE) val second = calendar.get(Calendar.SECOND) // 从星期日开始,星期日为 1 val week = calendar.get(Calendar.DAY_OF_WEEK) Log.d(TAG, \" 当前时间: $year-$month-$day $hour:$minute:$second week:$week\")

3、使用Date类

Date类代表一个特定的瞬间,精确到毫秒。

 val date = Date() Log.d(TAG, \"当前时间:$date\") // 如果需要格式化日期,可以使用SimpleDateFormat val sdf = SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\", Locale.getDefault()) val formattedDate: String = sdf.format(date) Log.d(TAG, \"格式化后的日期:$formattedDate\")

4、使用Time类(不推荐,已废弃)

 val time = Time() // 创建Time对象 time.setToNow() // 设置为当前时间 val year: Int = time.year // 获取年份 val month: Int = time.month + 1 // 获取月份,月份从0开始,需要加1 val day: Int = time.monthDay // 获取日期 val hour: Int = time.hour // 获取小时(24小时制) val minute: Int = time.minute // 获取分钟 val second: Int = time.second // 获取秒数 Log.d(TAG, \"当前时间:${year}年${month}月${day}日 ${hour}:$minute:$second\")

5、使用SystemClock类

SystemClock类提供了几种不同的时间获取方式,适用于不同的场景:

  • SystemClock.elapsedRealtime():返回自设备启动以来的时间(不包括睡眠时间),单位为毫秒。
  • SystemClock.uptimeMillis():返回自设备启动以来的时间(包括睡眠时间),单位为毫秒。
  • SystemClock.currentThreadTimeMillis():返回当前线程的CPU时间,单位为毫秒。
 val elapsedRealtime= SystemClock.elapsedRealtime() Log.d(\"ElapsedRealtime\", \"自设备启动以来的时间(不包括睡眠时间):$elapsedRealtime\") val uptimeMillis = SystemClock.uptimeMillis() Log.d(\"UptimeMillis\", \"自设备启动以来的时间(包括睡眠时间):$uptimeMillis\") val currentThreadTimeMillis = SystemClock.currentThreadTimeMillis() Log.d(\"CurrentThreadTimeMillis\", \"当前线程的CPU时间:$currentThreadTimeMillis\")

6、将 Long 型时间戳转换成字符串

import android.icu.text.SimpleDateFormatimport java.util.Dateimport java.util.Locale /** * 将 Long 型时间戳转换为时间字符串(2001-01-01 01:01:01) * @param timestamp 时间戳 */ fun getTimeFromTimestamp(timestamp: Long): String { // 将时间戳转换为 Date 对象 val date = Date(timestamp) // 定义时间格式 val formatter = SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\", Locale.getDefault()) // 将 Date 对象格式化为字符串 return formatter.format(date) }

7、获取上周第一天的时间

/** * 获取今天是星期几 * @return 1-7 (星期一 ~ 星期日) */ fun getDayOfWeek(): Int { return Calendar.getInstance().get(Calendar.DAY_OF_WEEK) } /** * 获取本周或上周第一天的日期 * @param type 0:本周 1:上周 */ fun getFirstDayOfWeek(type: Int): String { val calendar = Calendar.getInstance() // 设置周一为一周的第一天 calendar.firstDayOfWeek = Calendar.MONDAY // 设置当前时间为周一 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) if (type == 1) { // 向前推一周 calendar.add(Calendar.DAY_OF_YEAR, -7) } // 设置时间为当天的 00:00:00 calendar.set(Calendar.HOUR_OF_DAY, 0) calendar.set(Calendar.MINUTE, 0) calendar.set(Calendar.SECOND, 0) calendar.set(Calendar.MILLISECOND, 0) // 格式化时间 val format = SimpleDateFormat(\"yyyyMMdd\", Locale.getDefault()) val formatDate = format.format(calendar.time) Log.d(TAG, \"[getFirstDayOfWeek] first day of week: $formatDate\") return formatDate }

8、获取增减天数、周数、月份数后的时间

package com.android.example.ui.utilsimport android.icu.util.Calendarimport android.icu.util.TimeZoneimport android.util.Logimport java.text.SimpleDateFormatimport java.util.Localeobject DateTimeUtils { private const val TAG = \"DateTimeUtils\" /** * 获取今天是星期几 * @return 1-7 (星期一 ~ 星期日) */ fun getDayOfWeek(): Int { return Calendar.getInstance().get(Calendar.DAY_OF_WEEK) } /** * 增加天数后的时间 * @param days 增减天数 0-当天 */ fun getBeforeOrLastDays(days: Int): String { val calendar = Calendar.getInstance() // 设置周一为一周的第一天 calendar.firstDayOfWeek = Calendar.MONDAY // 设置当前时间为周一 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) // 增减天数 calendar.add(Calendar.DAY_OF_YEAR, days) // 设置时间为当天的 00:00:00 calendar.set(Calendar.HOUR_OF_DAY, 0) calendar.set(Calendar.MINUTE, 0) calendar.set(Calendar.SECOND, 0) calendar.set(Calendar.MILLISECOND, 0) // 格式化时间 val format = SimpleDateFormat(\"yyyyMMdd\", Locale.getDefault()) val formatDate = format.format(calendar.time) Log.d(TAG, \"[getBeforeOrLastOfDays] days: $days, time: $formatDate\") return formatDate } /** * 获取月份时间 * @param months 增减月份 0: 本月 >0 往后月份 <0 往前月份 * @return 时间字符串:202404 */ fun getBeforeOrLastMonths(months: Int): String { val calendar = Calendar.getInstance() calendar.add(Calendar.MONTH, months) val sdf = SimpleDateFormat(\"yyyyMM\", Locale.getDefault()) return sdf.format(calendar.time) } /** * 获取前后周第一天的日期 * @param weeks 增减周数 0为本周 */ fun getFirstDayOfWeeks(weeks: Int): String { val calendar = Calendar.getInstance() // 设置周一为一周的第一天 calendar.firstDayOfWeek = Calendar.MONDAY // 设置当前时间为周一 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) // 增减周数 calendar.add(Calendar.WEEK_OF_YEAR, weeks) // 设置时间为当天的 00:00:00 calendar.set(Calendar.HOUR_OF_DAY, 0) calendar.set(Calendar.MINUTE, 0) calendar.set(Calendar.SECOND, 0) calendar.set(Calendar.MILLISECOND, 0) // 格式化时间 val format = SimpleDateFormat(\"yyyyMMdd\", Locale.getDefault()) val formatDate = format.format(calendar.time) Log.d(TAG, \"[getFirstDayOfWeeks] weeks: $weeks, time: $formatDate\") return formatDate } /** * 获取前后几个月的第一天时间戳 * @param months 月份数,负数为前几个月,正数为后几个月 * @return 时间戳,单位毫秒 */ fun getFirstDayOfMonths(months: Int): Long { // UTC 时间// val calendar = Calendar.getInstance(TimeZone.getTimeZone(\"UTC\"))// val calendar = Calendar.getInstance() // 东八区时间,与 UTC 时间差 8 小时 val calendar = Calendar.getInstance(TimeZone.getTimeZone(\"Asia/Shanghai\")) // 设置 1 号为一个月的第一天 calendar.set(Calendar.DAY_OF_MONTH, 1) // 向前推 monthsAgo 个月 calendar.add(Calendar.MONTH, months) // 设置时间为当天的 00:00:00 calendar.set(Calendar.HOUR_OF_DAY, 0) calendar.set(Calendar.MINUTE, 0) calendar.set(Calendar.SECOND, 0) calendar.set(Calendar.MILLISECOND, 0) return calendar.time.time }}