Flutter中如何将tz.TZDateTime转为带AM/PM的12小时制格式
解决Flutter中tz.TZDateTime转12小时制带AM/PM的问题
要将tz.TZDateTime格式化为带AM/PM的12小时制,直接使用intl包的DateFormat即可,步骤如下:
- 添加依赖
在pubspec.yaml中引入intl包(如果还没添加):
dependencies: intl: ^0.18.1
- 编写格式化代码
导入intl包后,新增格式化方法处理tz.TZDateTime实例:
import 'package:intl/intl.dart'; import 'package:timezone/timezone.dart' as tz; tz.TZDateTime _converTime(int hour, int minutes) { final tz.TZDateTime now = tz.TZDateTime.now(tz.local); tz.TZDateTime scheduleDate = tz.TZDateTime(tz.getLocation('America/New_York'), now.year, now.month, now.day, hour, minutes); if (scheduleDate.isBefore(now)) { scheduleDate = scheduleDate.add(const Duration(days: 1)); } return scheduleDate; } // 格式化TZDateTime为目标格式 String formatTo12Hour(tz.TZDateTime dateTime) { // 格式说明:yyyy(4位年)-MM(2位月)-dd(2位日) hh(12小时制)-mm(分)-ss(秒) a(AM/PM) final formatter = DateFormat('yyyy-MM-dd hh:mm:ss a'); return formatter.format(dateTime); } // 使用示例 void testFormat() { var targetTime = _converTime(21, 23); // 传入24小时制的21点(晚上9点) print(formatTo12Hour(targetTime)); // 输出:2023-07-13 09:23:00 PM }
- 格式符说明
hh:12小时制的小时(带前导零,如09、12)h:12小时制的小时(不带前导零,如9、12)a:自动生成AM(上午)或PM(下午)标识
内容的提问来源于stack exchange,提问作者Jaina
相关产品推荐
相关产品推荐

