Flutter 颤振-将24小时格式转换为12小时格式

Flutter 颤振-将24小时格式转换为12小时格式,flutter,dart,Flutter,Dart,我正在使用showTimePicker获得时间 TimeOfDay _selectedTime; Future<Null> _selectTime(BuildContext context) async { final TimeOfDay timePicked = await showTimePicker( context: context, initialTime: TimeOfDay.now(), ); if

我正在使用showTimePicker获得时间

  TimeOfDay _selectedTime;

  Future<Null> _selectTime(BuildContext context) async {
    final TimeOfDay timePicked = await showTimePicker(
        context: context,
        initialTime: TimeOfDay.now(),

      );
    if (timePicked != null)
      setState(() {
        _selectedTime = timePicked;
      });
  }
但是这里的时间是24小时制的。假设我选择下午3点,则显示15点,即24小时格式

如何将此时间转换为12小时格式?i、 它应该是下午3点而不是15点

我可以编写逻辑来转换它。但是,是否有内置功能可以执行此操作?

您可以使用TimeofDay的hourOfPeriod属性以12小时格式返回小时。当然,这将不会在上午至下午结束:

  TimeOfDay _selectedTime;

  Future<Null> _selectTime(BuildContext context) async {
    final TimeOfDay timePicked = await showTimePicker(
      context: context,
      initialTime: TimeOfDay.now(),

    );
    if (timePicked != null)
      setState(() {
        _selectedTime = timePicked.replacing(hour: timePicked.hourOfPeriod);
      });

    print(_selectedTime.toString());
  }
您可以使用TimeofDay的hourOfPeriod属性以12小时格式返回小时。当然,这将不会在上午至下午结束:

  TimeOfDay _selectedTime;

  Future<Null> _selectTime(BuildContext context) async {
    final TimeOfDay timePicked = await showTimePicker(
      context: context,
      initialTime: TimeOfDay.now(),

    );
    if (timePicked != null)
      setState(() {
        _selectedTime = timePicked.replacing(hour: timePicked.hourOfPeriod);
      });

    print(_selectedTime.toString());
  }

我创建了一个扩展,用于将TimeOfDay解析为12小时格式

extension TimeOfDayExtensions on TimeOfDay {
 String format12Hour(BuildContext context) {
    TimeOfDay time = replacing(hour: this.hourOfPeriod);
    MaterialLocalizations localizations = MaterialLocalizations.of(context);

    final StringBuffer buffer = StringBuffer();

    buffer
      ..write(time.format(context))
      ..write(' ')
      ..write(period == DayPeriod.am
          ? localizations.anteMeridiemAbbreviation
          : localizations.postMeridiemAbbreviation);

    return '$buffer';
  }
你可以用like

pickedTime?.format12Hour(context);

我创建了一个扩展,用于将TimeOfDay解析为12小时格式

extension TimeOfDayExtensions on TimeOfDay {
 String format12Hour(BuildContext context) {
    TimeOfDay time = replacing(hour: this.hourOfPeriod);
    MaterialLocalizations localizations = MaterialLocalizations.of(context);

    final StringBuffer buffer = StringBuffer();

    buffer
      ..write(time.format(context))
      ..write(' ')
      ..write(period == DayPeriod.am
          ? localizations.anteMeridiemAbbreviation
          : localizations.postMeridiemAbbreviation);

    return '$buffer';
  }
你可以用like

pickedTime?.format12Hour(context);

伟大的谢谢:但是,由于某种原因,此解决方案将period参数更改为dayperion.am,即使时间设置为PM时间。我在@HudsonKim之前没有注意到这一点。我会查的,谢谢。太好了!谢谢:但是,由于某种原因,此解决方案将period参数更改为dayperion.am,即使时间设置为PM时间。我在@HudsonKim之前没有注意到这一点。我会查出来的,谢谢。