如何在 android 的任何版本上每天从每台 android 设备获取唯一编号(即来自每台设备的相同编号)运行

How to get a unique number everyday from every android device (i.e same number from every device) running on any version of android

我想每天获得一个可以从任何 android 设备生成的唯一编号,并且每个设备都应该生成相同的编号。 我尝试获取日期,但 android 的旧版本不支持语言环境时区, 然后我使用了这段代码

        val df = DateFormat.getDateInstance()
        var dff = DateFormat.getTimeInstance()
        var localDate = df.format(Date())
        df.timeZone = TimeZone.getTimeZone("gmt")
        val gmtDate = df.format(Date())
        val localTime = dff.format(Date())

但是这会从不同的设备生成不同格式的日期,但我希望 6.

以上的每个 android 版本的格式都相同

System.currentTimeMillis()给你a UTC timestamp,怎么样?您可以将它除以 (1000 * 60 * 60 * 24) 以将其四舍五入到最近的一天(闰秒可能存在一些问题,但您可能不在乎)

tl;博士

java.time.LocalDate
.now( ZoneOffset.UTC )
.atStartOfDay( ZoneOffset.UTC )
.toInstant()
.getEpochSecond()

详情

你的问题不清楚。也许你问的是如何确定当前时刻在 UTC 中看到的一天的第一时刻。

仅使用 java.time 类 进行 date-time 工作。永远不要使用有严重缺陷的旧版 类,例如 DateCalendarSimpleDateFormat

java.time 类 内置于 Android 26+。对于早期的 Android,最新的工具通过“API de-sugaring”带来了大部分功能。

Instant startOfTodayUtc = 
    LocalDate
    .now( ZoneOffset.UTC )
    .atStartOfDay( ZoneOffset.UTC )
    .toInstant() ;
long secondsSinceEpochReference = startOfTodayUtc.getEpochSecond() ;

我使用以下代码从任何设备获取相同格式的日期和时间。这适用于 Android 6.0 和 Android 11.

@SuppressLint("SimpleDateFormat")
        val df = SimpleDateFormat("yyyy-MM-dd")
        df.timeZone = TimeZone.getTimeZone("gmt")
        val dff =SimpleDateFormat("yy-MMM-dd, HH:mm:ss aa")
        val dfff =SimpleDateFormat("yyyyMMdd")
        val gmtDate = df.format(Date())
        val localDateTime = dff.format(Date())
        val isoDate=dfff.format(Date())

我知道你的问题,你想在你的每台设备上获得一个全球唯一的,我有两种方法:

  1. 你可以建立一个唯一编号的中心发电机;
  2. 可以学习Snowflake算法,这个方法用到了时间和ip 生成全球唯一编号;

希望对你有帮助。