【问题标题】:Add AM or PM when converting from 24 hour to 12 hour format in flutter在颤振中从 24 小时格式转换为 12 小时格式时添加 AM 或 PM
【发布时间】:2026-02-11 14:20:08
【问题描述】:

我有一个时间选择器,用于显示用户选择的当前时间。我能够将其从 24 小时格式转换为 12 小时格式。但我希望它也显示 AM 和 PM,而不仅仅是 AM。有没有办法使用 TimeOfDay 数据类型显示 AM 和 PM 的时间?欢迎提出任何建议。

Future<Null> selectTime(BuildContext context) async {
    TimeOfDay timePicked = await showTimePicker(
      context: context,
      initialTime: _currentTime,
    );

    if (timePicked != null && timePicked != _currentTime) {
      setState(() {
        _currentTime = timePicked;

        print("Time Selected : ${_currentTime.toString()}");
           _currentTime = timePicked.replacing(hour: timePicked.hourOfPeriod); //this gets it in 12 hour format

        Fluttertoast.showToast(
            msg:
                "${_currentTime.format(context)}",
            toastLength: Toast.LENGTH_LONG,
            gravity: ToastGravity.BOTTOM,
            timeInSecForIos: 1,
            backgroundColor: Colors.green,
            textColor: Colors.white,
            fontSize: 16.0);
      });
    }
  }

【问题讨论】:

    标签: flutter dart timeofday


    【解决方案1】:
    import 'package:flutter/material.dart';
    
    void main() {
      TimeOfDay noonTime = TimeOfDay(hour: 15, minute: 0); // 3:00 PM
      TimeOfDay morningTime = TimeOfDay(hour: 5, minute: 0); // 5:00 AM
    
      print(noonTime.period); // gives DayPeriod.pm
      print(morningTime.period); // gives DayPeriod.am
    
      //example 1
      if (noonTime.period == DayPeriod.am)
        print("$noonTime is AM");
      else
        print("$noonTime is PM");
    
      //example 2
      if (morningTime.period == DayPeriod.am)
        print("$morningTime is AM");
      else
        print("$morningTime is PM");
    }
    

    【讨论】:

    • 谢谢,这适用于显示上午和下午。当时,我最终创建了另一个变量,让它以 12 小时格式显示小时和时间。然后我拆分了“TimeOfDay”前缀,然后将“(”和“)”替换为“”(一个空格,以便按照我的意愿进行格式化)。
    【解决方案2】:

    您只需要查看 24 小时格式的 _currentTime 是否大于 12,如果是,则为 PM,如果不是,则为 AM

    希望对你有帮助

    【讨论】:

    • 移动设备除外,而不是午夜 00:00 到 12:00,因此这可能会导致问题
    最近更新 更多