You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用如何生成[日期_序号]格式的递增序列号

Android 实现规则序列号生成方案

实现思路

核心逻辑分为两部分:

  • 格式化当前日期为ddMMyy格式字符串
  • 持久化存储上一次生成序列号的日期、当日累计序号,每次生成时做日期比对:
    • 若存储的日期与当前日期一致,序号自增1
    • 若存储的日期与当前日期不一致,序号重置为1,同时更新存储的日期为当前日期

具体实现代码

我们用Android原生轻量存储SharedPreferences做持久化,不需要额外依赖,适配绝大多数场景:

1. 核心生成逻辑

import android.content.Context;
import android.content.SharedPreferences;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class SerialGenerator {
    private static final String PREF_NAME = "serial_config";
    private static final String KEY_LAST_DATE = "last_generate_date";
    private static final String KEY_CURRENT_SEQ = "current_sequence";
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("ddMMyy", Locale.getDefault());

    // 加 synchronized 避免多线程并发调用生成重复序号
    public static synchronized String generateNextSerial(Context context) {
        SharedPreferences sp = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        String currentDate = DATE_FORMAT.format(new Date());
        
        // 读取存储的历史数据
        String lastDate = sp.getString(KEY_LAST_DATE, "");
        int currentSeq = sp.getInt(KEY_CURRENT_SEQ, 0);

        // 日期比对,更新序号
        if (currentDate.equals(lastDate)) {
            currentSeq++;
        } else {
            currentSeq = 1;
        }

        // 新数据回写存储
        sp.edit()
            .putString(KEY_LAST_DATE, currentDate)
            .putInt(KEY_CURRENT_SEQ, currentSeq)
            .apply();

        // 拼接返回最终序列号
        return currentDate + "_" + currentSeq;
    }
}

2. 按钮点击调用示例

在Activity/Fragment的按钮点击事件中直接调用即可:

// 按钮点击监听
findViewById(R.id.btn_generate).setOnClickListener(v -> {
    String serial = SerialGenerator.generateNextSerial(this);
    // 后续自行处理生成的serial,比如展示到UI、保存到本地等
    Log.d("GeneratedSerial", serial);
});

注意事项

  • 如果需要适配Android 8.0以下版本且不想用SimpleDateFormat,可以开启核心库 desugar 支持后用LocalDate格式化日期,避免线程安全问题
  • SharedPreferences存储的数据会在用户清除应用数据、卸载重装时丢失,如果需要序号永久不中断,需要搭配服务端存储做同步
  • 若有离线多设备生成序列号的需求,建议在规则中补充设备唯一标识前缀,避免跨设备重复

内容的提问来源于stack exchange,提问作者Ayesha Anika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:24:04