无法正确解析 Dart 中从字符串到日期时间的小时分钟秒

问题描述 投票:0回答:1

我可以将时间格式化为我想要的格式“3:38 PM”,但它是字符串类型。但我想要 DateTime 以便以后计算。我无法解析它们。我想从日期时间 1970-01-01 03:38:00.000 中删除这个“1970-01-01

我希望这个字符串为“3:38 PM”->这个日期时间“03:38:00.000”。我怎样才能做到这一点?

import 'package:intl/intl.dart';

void main() {
  String timeStr = "3:38 PM";
  try {
    DateTime parsedTime = DateFormat("HH:mm a").parse(timeStr);

    print(parsedTime); // 1970-01-01 15:38:00.000

    String formattedTime = DateFormat("h:mm a").format(parsedTime);

    print(formattedTime); // Output: 3:38 PM
  } catch (e) {
    print("Invalid time format");
  }
}
flutter dart datetime
1个回答
0
投票

如果没有日期部分,则无法创建

DateTime
对象。如果您不传递日期部分并尝试将字符串解析为 DateTime,Dart 会自动将纪元日期 (1970-01-01) 添加到对象中。

两种可能的解决方法是:

  1. 用今天的日期处理你的逻辑,如果你不使用它,请忽略日期部分。
import 'package:intl/intl.dart';

void main() {
  String timeStr = "3:38 PM";
  try {
    final now = DateTime.now();
    DateTime parsedTime = DateFormat("HH:mm a").parse(timeStr);

    DateTime parsedTimeOfToday = DateTime(
      now.year,
      now.month,
      now.day,
      parsedTime.hour,
      parsedTime.minute,
      parsedTime.second,
      parsedTime.millisecond,
      parsedTime.microsecond,
    );

    print(parsedTimeOfToday); // 1970-01-01 15:38:00.000

    String formattedTime = DateFormat("h:mm a").format(parsedTimeOfToday);

    print(formattedTime); // Output: 3:38 PM
  } catch (e) {
    print("Invalid time format");
  }
}
  1. 如果您只想处理 Time,那么最好创建自己的 Time 类并在其上实现必要的方法。这反过来可能会简化您自己的计算。

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.