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

Flutter中如何格式化TimePicker选择的时间?

解决方案

要使用intl包把TimeOfDay格式化为2:30 PM的样式,你需要先将TimeOfDay转换为DateTime对象(因为intl的DateFormat仅支持处理DateTime类型),再进行格式化。以下是修改后的完整代码:

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

class ShowTimePickerWidget extends StatefulWidget {
  const ShowTimePickerWidget({super.key});

  @override
  State<ShowTimePickerWidget> createState() => _ShowTimePickerWidgetState();
}

class _ShowTimePickerWidgetState extends State<ShowTimePickerWidget> {
  TimeOfDay? selectedTime;

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        const Icon(Icons.access_time),
        Expanded(
          child: TextButton(
            onPressed: () async {
              TimeOfDay time = TimeOfDay.now();
              final pickedTime = await showTimePicker(
                context: context,
                initialTime: time,
              );
              setState(() {
                selectedTime = pickedTime;
              });
            },
            child: Text(
              (selectedTime == null)
                  ? 'Time to start your day'
                  : DateFormat('h:mm a').format(
                      DateTime(2020, 1, 1, selectedTime!.hour, selectedTime!.minute),
                    ),
            ),
          ),
        ),
      ],
    );
  }
}

关键说明:

  • TimeOfDay转DateTime:我们创建了一个任意日期的DateTime对象(这里用2020-01-01,日期部分不影响时间格式化),传入selectedTime的小时和分钟数值即可。
  • 格式化规则解析:DateFormat('h:mm a')里的各部分含义:
    • h:12小时制的小时(不带前导零)
    • mm:两位格式的分钟数
    • a:自动显示AM/PM标识

这样就能生成你需要的2:30 PM格式的时间字符串了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:02:41