【问题标题】:Convert Minutes to Years, months, days, hours, minutes in Dart在 Dart 中将分钟转换为年、月、日、小时、分钟
【发布时间】:2021-08-14 20:34:55
【问题描述】:

我得到一个包含大量分钟的 int,例如:

int minutes = 1000000

并且我想将其转换为格式包含:年、月、日、小时和分钟的字符串。

类似这样的:

(下面的字符串示例不对应1,000,000 min,只是看格式)

String time = '3 years, 2 month, 21 days, 13 hours, and 45 minutes'

我一直在寻找是否可以使用 Duration 解决它,但它不允许几个月或几年。我也试过比较DateTimes,但找不到合适的答案。

【问题讨论】:

  • 唯一的方法是使用Duration 并在天-月和天-年之间手动转换。
  • 你想要的实际上是不可能的,因为月份和年份的大小取决于你从哪一天开始计数。

标签: flutter dart


【解决方案1】:

一般来说,处理日期时间可能很困难。一个天真的解决方案是将您的持续时间添加到“零”DateTime 并使用DateTime.minute 等来获取值:例如

const minutes = 100000;
final duration = Duration(minutes: minutes);
final zero = DateTime();

final dateTime = zero.add(duration);

// then you can use:
dateTime.minute  // will be between 0 and 59
dateTime.hour  // will be between 0 and 23

小心,day 和 month 从 1 开始,而不是 0。

但是,这只是将minutes * 60 秒添加到dateTime,这可能是也可能不是您想要的。例如,您应该考虑一年是否正好等于 365 天,或者您是否考虑闰年(或闰秒)、您在哪个时区进行评估等等。

如果您对“一年是 12 个月”、“一个月是 30 天”等定义感到满意,那么您可能更喜欢手动解决方案:

const timeInMinutes = 1000000;

final minutes = timeInMinutes % 60;
final hours = ((timeInMinutes - minutes) / 60) % 24;
// etc

或者,查看 pub.dev 上的 duration 包:https://pub.dev/packages/duration 它似乎做了一些类似于你想要的事情

【讨论】:

  • 两种解决方案都对我的情况有用。一个小细节,以防您想从答案中更正它:日和月从 1 开始,而不是日和年。谢谢!
  • 赞成。非常感谢,从你的回答中得到了灵感。
猜你喜欢
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 2017-11-22
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多