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

如何在Android应用中转换/Date(时间戳)/格式字符串为完整日期时间

嘿,这个问题我熟!这种带/Date(1527677209864)/格式的日期是.NET常用的JSON日期格式,在Android里处理起来其实很简单,给你几种靠谱的实现方式:

方法一:手动提取时间戳转换(最直接)

这种方法不需要额外依赖,核心思路就是先从字符串里提取出括号里的毫秒级时间戳,再转成日期并格式化。

Java 代码示例:

// 假设API返回的日期字符串
String dateStr = "/Date(1527677209864)/";

// 提取时间戳:去掉非数字字符,转成long类型
long timestamp = Long.parseLong(dateStr.replaceAll("[^0-9]", ""));

// 转成Date对象
Date date = new Date(timestamp);

// 格式化你需要的日期时间格式,比如"yyyy-MM-dd HH:mm:ss"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String formattedDateTime = sdf.format(date);

Kotlin 代码示例:

val dateStr = "/Date(1527677209864)/"

// 过滤出数字字符并转成Long类型的时间戳
val timestamp = dateStr.filter { it.isDigit() }.toLong()

val date = Date(timestamp)
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedDateTime = sdf.format(date)
方法二:用Java 8+日期API(推荐,线程安全)

SimpleDateFormat存在线程不安全的问题,如果你开发的应用目标是Android 8.0(API 26)及以上,推荐使用java.time包下的新日期API;如果要兼容低版本,可以引入ThreeTenABP库(Android版的JSR-310实现)。

Android 8.0+ Java 代码示例:

String dateStr = "/Date(1527677209864)/";
long timestamp = Long.parseLong(dateStr.replaceAll("[^0-9]", ""));

// 从毫秒时间戳生成Instant,再转成本地时区的LocalDateTime
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

// 自定义格式化样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String formattedDateTime = formatter.format(localDateTime);

Android 8.0+ Kotlin 代码示例:

val dateStr = "/Date(1527677209864)/"
val timestamp = dateStr.filter { it.isDigit() }.toLong()

val instant = Instant.ofEpochMilli(timestamp)
val localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault())
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedDateTime = formatter.format(localDateTime)
方法三:结合Gson自动解析(适合JSON序列化/反序列化场景)

如果你的项目用Gson来解析API返回的JSON,可以自定义一个TypeAdapter,让Gson自动处理这种日期格式,不用每次手动解析。

Java 自定义TypeAdapter示例:

public class DotNetDateAdapter extends TypeAdapter<Date> {
    @Override
    public void write(JsonWriter out, Date value) throws IOException {
        // 如果需要把Date转成/Date(xxx)/格式的字符串,这里写反向逻辑
        out.value("/Date(" + value.getTime() + ")/");
    }

    @Override
    public Date read(JsonReader in) throws IOException {
        String dateStr = in.nextString();
        long timestamp = Long.parseLong(dateStr.replaceAll("[^0-9]", ""));
        return new Date(timestamp);
    }
}

注册TypeAdapter到Gson:

Gson gson = new GsonBuilder()
        .registerTypeAdapter(Date.class, new DotNetDateAdapter())
        .create();

// 之后用这个gson对象解析JSON时,会自动把/Date(xxx)/转成Date对象
YourModel model = gson.fromJson(jsonString, YourModel.class);

一些注意点:

  • 这个格式里的时间戳是毫秒级的,别当成秒来处理,否则日期会偏差几十年
  • 如果要兼容Android 7.0及以下,ThreeTenABP是个不错的选择,它和Java 8的日期API用法几乎一致
  • SimpleDateFormat是线程不安全的,尽量不要在全局单例中复用,或者用ThreadLocal来包装它

内容的提问来源于stack exchange,提问作者mahmoud yahia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:14:16