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

Android Kotlin使用扩展文件实现API返回日期字符串转Thu. 23 Sept 2021格式

嘿,这个需求提得很到位!用扩展文件统一处理日期格式化确实是个聪明的做法,既能保持代码简洁,后期维护也方便。我给你一步步拆解实现方案:

第一步:创建日期处理扩展文件

首先,在你的项目里新建一个专门的工具文件,比如 utils/date-extensions.js,用来封装所有日期格式化逻辑。这里我们用原生JavaScript实现,不需要额外依赖:

// utils/date-extensions.js

// 定义目标格式需要的星期、月份缩写(注意Sept是9月的特殊缩写)
const WEEKDAY_SHORT = ['Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.'];
const MONTH_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

// 单个日期字符串转换函数
export function formatApiDate(dateStr) {
  const date = new Date(dateStr);
  
  // 先校验日期有效性,避免API返回脏数据导致报错
  if (isNaN(date.getTime())) {
    console.warn(`无效的日期字符串:${dateStr}`);
    return 'Invalid Date';
  }
  
  const weekday = WEEKDAY_SHORT[date.getDay()];
  const day = date.getDate();
  const month = MONTH_SHORT[date.getMonth()];
  const year = date.getFullYear();
  
  return `${weekday} ${day} ${month} ${year}`;
}

// 批量处理日期数组的辅助函数(如果API返回大量日期列表)
export function formatApiDates(dateStrArray) {
  return dateStrArray.map(dateStr => formatApiDate(dateStr));
}
第二步:在项目中引入并使用这个扩展

接下来根据你的项目框架,选择全局引入或者按需导入:

全局引入(比如Vue/React项目)

如果是Vue项目,可以在 main.js 里把格式化函数挂载到全局:

// main.js
import { formatApiDate } from './utils/date-extensions';

Vue.prototype.$formatDate = formatApiDate;

之后在任意组件里就能直接用:

<!-- 组件模板中 -->
<span>{{ $formatDate(apiData.createdAt) }}</span>

如果是React项目,更推荐按需导入,但也可以通过Context全局共享:

// 组件文件中
import { formatApiDate, formatApiDates } from '../utils/date-extensions';

// 处理单个日期
const formattedSingleDate = formatApiDate(apiResponse.date);

// 批量处理API返回的日期数组
const formattedDateList = formatApiDates(apiResponse.dateList);

按需导入(通用方案)

不管什么框架,直接在需要处理日期的文件里导入函数即可,这种方式更清晰,也利于Tree Shaking:

import { formatApiDate } from './utils/date-extensions';

const processedDate = formatApiDate(apiReturnedDateStr);
第三步:处理时区与特殊场景(可选但关键)

如果API返回的是UTC格式的日期(比如 2021-09-23T00:00:00Z),直接用上面的函数会转换为本地时区,可能导致日期偏移。如果需要保持UTC时间的显示,可以修改函数为UTC版本:

// 添加到date-extensions.js中
export function formatApiDateUTC(dateStr) {
  const date = new Date(dateStr);
  
  if (isNaN(date.getTime())) {
    console.warn(`无效的日期字符串:${dateStr}`);
    return 'Invalid Date';
  }
  
  const weekday = WEEKDAY_SHORT[date.getUTCDay()];
  const day = date.getUTCDate();
  const month = MONTH_SHORT[date.getUTCMonth()];
  const year = date.getUTCFullYear();
  
  return `${weekday} ${day} ${month} ${year}`;
}

另外,如果API返回的是非标准日期字符串(比如 2021/09/23 或者 09-23-2021),可以在函数里先做预处理:

// 处理非标准日期的示例
export function formatApiDate(dateStr) {
  // 把斜杠替换为横杠,兼容非标准格式
  const standardizedStr = dateStr.replace(/\//g, '-');
  const date = new Date(standardizedStr);
  
  // 后续逻辑不变...
}
额外优化:基于日期库简化实现(如果项目已用)

如果你的项目已经引入了Day.js、Moment.js这类日期库,可以用它们来简化代码,同时避免原生Date的兼容性问题。以Day.js为例:

// utils/date-extensions.js
import dayjs from 'dayjs';
import localeData from 'dayjs/plugin/localeData';

// 加载locale插件,自定义月份缩写
dayjs.extend(localeData);

// 自定义本地化,把默认的Sep改成Sept
const customLocale = {
  monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
};

// 合并到Day.js的默认本地化中
dayjs.locale({ ...dayjs.locale(), ...customLocale }, null, true);

export function formatApiDate(dateStr) {
  return dayjs(dateStr).format('ddd. DD MMM YYYY');
}

这样代码更简洁,而且Day.js的时区处理、日期解析能力更强,适合复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:17:33