【问题标题】:Flutter - Convert 24 hour format to 12 hour formatFlutter - 将 24 小时格式转换为 12 小时格式
【发布时间】:2019-12-24 23:01:31
【问题描述】:

我正在使用 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;
      });
  }

但这里_selectedTime 是24 小时制的。假设如果我选择 3.00 PM,那么它会显示 15.00,即它是 24 小时制。

如何将此时间转换为 12 小时格式?即它应该显示我下午 3 点而不是 15 点。

我可以编写转换它的逻辑。但是有什么内置的东西可以这样做吗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以使用TimeofDayhourOfPeriod 属性以12 小时格式返回小时。当然,这将没有 AM - PM 结尾:

      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());
      }
    

    【讨论】:

    • 太棒了!谢谢:)
    • 然而,此解决方案出于某种原因将 period 参数更改为 DayPeriod.am,即使设置的时间是 PM 时间。
    • 在@HudsonKim 之前我没有注意到这一点。我去看看,谢谢。
    【解决方案2】:

    我创建了一个扩展,用于将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);
    

    【讨论】:

      【解决方案3】:

      使用DateFormat 将时间转换为 12 小时格式,AM & PM

      TimeOfDay? _selectedTime;
      
      Future<Null> _selectTime(BuildContext context) async {
          final TimeOfDay? timePicked = await showTimePicker(
            context: context,
            initialTime: TimeOfDay.now(),
          );
          if (timePicked != null)
            setState(() {
              _selectedTime = timePicked;
            });
          // Conversion logic starts here
          DateTime tempDate = DateFormat("hh:mm").parse(
              _selectedTime!.hour.toString() +
                  ":" + _selectedTime!.minute.toString());
          var dateFormat = DateFormat("h:mm a"); // you can change the format here
          print(dateFormat.format(tempDate));
        }
      

      输出:

      颤振:晚上 8:00

      颤振:凌晨 1:00

      颤振:下午 6:00

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多