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
相关产品推荐
相关产品推荐

