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

Dart中如何将数字转换为12小时制时间及对应星期几

Dart实现指定JSON字段格式转换

核心转换规则

需要实现两类字段的格式转换,规则如下:

  • 4位长度的时间字符串(如'0900'、'1300')转12小时制格式,末尾加am/pm标识:小时部分转整数后,小于12为am时段,大于等于12为pm时段,特殊处理0点为12am、12点为12pm,分钟部分保留两位原值
  • 1-7范围的星期数字转英文星期全称,按照示例中5对应Friday的要求,采用周一为一周起始的映射规则:1=Monday、2=Tuesday、3=Wednesday、4=Thursday、5=Friday、6=Saturday、7=Sunday

实现代码

可以先封装两个可复用的单字段转换方法,再处理整体JSON结构的转换:

// 4位时间字符串转12小时制带am/pm格式
String formatTimeStr(String rawTime) {
  // 开发阶段校验输入格式
  assert(rawTime.length == 4, '时间字符串必须为4位格式,如0900');
  final hour = int.parse(rawTime.substring(0, 2));
  final minute = rawTime.substring(2);
  final period = hour < 12 ? 'am' : 'pm';
  // 计算12小时制下的显示小时值
  final displayHour = hour % 12 == 0 ? 12 : hour % 12;
  return '$displayHour:$minute$period';
}

// 星期数字转英文全称
String getWeekdayName(int dayNum) {
  const weekdayMap = {
    1: 'Monday',
    2: 'Tuesday',
    3: 'Wednesday',
    4: 'Thursday',
    5: 'Friday',
    6: 'Saturday',
    7: 'Sunday'
  };
  assert(dayNum >=1 && dayNum <=7, '星期数字必须在1-7范围内');
  return weekdayMap[dayNum]!;
}

// 整体JSON结构转换入口
Map<String, dynamic> convertScheduleJson(Map<String, dynamic> rawJson) {
  return {
    'start': formatTimeStr(rawJson['start'] as String),
    'end': formatTimeStr(rawJson['end'] as String),
    'day': getWeekdayName(rawJson['day'] as int)
  };
}

效果验证

传入你提供的示例数据测试:

void main() {
  final rawData = {
    'start': '0900',
    'end': '1300',
    'day': 5
  };
  final convertedResult = convertScheduleJson(rawData);
  print(convertedResult);
  // 输出:{start: 9:00am, end: 1:00pm, day: Friday},和预期结果完全一致
}

如果你的接口返回的星期数字是0代表Sunday、6代表Saturday的JS风格规则,只需要调整weekdayMap的键值映射即可,上述代码默认匹配示例中5对应Friday的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:12:22