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

Flutter中如何将tz.TZDateTime转为带AM/PM的12小时制格式

解决Flutter中tz.TZDateTime转12小时制带AM/PM的问题

要将tz.TZDateTime格式化为带AM/PM的12小时制,直接使用intl包的DateFormat即可,步骤如下:

  1. 添加依赖
    在pubspec.yaml中引入intl包(如果还没添加):
dependencies:
  intl: ^0.18.1
  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
}
  1. 格式符说明
  • hh:12小时制的小时(带前导零,如09、12)
  • h:12小时制的小时(不带前导零,如9、12)
  • a:自动生成AM(上午)或PM(下午)标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:55:00