【问题标题】:Find out how many days, hours and minutes left until exact DateTime找出距离确切日期时间还有多少天、几小时和几分钟
【发布时间】:2021-11-20 13:17:34
【问题描述】:

我试图做这样的事情但失败了。我可以在一天内编写代码,但还剩多少小时和分钟。

示例图片:

【问题讨论】:

    标签: flutter datetime time


    【解决方案1】:

    如果您想将Duration 转换为天、分、小时和秒,您可以这样做:

    var days = duration.inDays;
    var hours = duration.inHours % 24;
    var minutes = duration.inMinutes % 60;
    var seconds = duration.inSeconds % 60;
    

    (如果您从总秒数而不是从 Duration 对象开始,您可以轻松地首先构造一个 Duration 对象:Duration(seconds: totalSeconds)。)

    请参阅https://stackoverflow.com/a/68685066/ 了解更复杂的版本,它将Duration 格式化为String1d2h3.45s 形式。

    【讨论】:

    • 非常感谢,先生。
    【解决方案2】:

    我为个人项目做了类似的东西,这就是 sn-p。这是一个辅助函数,你必须给它ms,即EndDateInMs - StartDateInMs。还有一个TimeFrame 类型,但你不需要它;只需计算周/天/小时/分钟的逻辑即可。

    import '../enums/enums.dart';
    
    Map<TimeFrame, int> msConverter(double ms) {
      int minutes;
      int hours;
      int days;
      int weeks;
    
      const msInWeek = 6.048e+8;
      weeks = (ms / msInWeek).floor();
    
      final msLeftForDays = ms - (msInWeek * weeks);
      const msInDay = 8.64e+7;
      days = (msLeftForDays / msInDay).floor();
    
      final msLeftForHours = msLeftForDays - (msInDay * days);
      const msInHour = 3.6e+6;
      hours = (msLeftForHours / msInHour).floor();
    
      final msLeftForMinutes = msLeftForHours - (msInHour * hours);
      const msInMinute = 60000;
      minutes = (msLeftForMinutes / msInMinute).round();
    
      return <TimeFrame, int>{
        TimeFrame.Weeks: weeks,
        TimeFrame.Days: days,
        TimeFrame.Hours: hours,
        TimeFrame.Minutes: minutes,
      };
    }
    

    【讨论】:

    • 请问先生,这是什么“6.048e+8+”或“8.64e+7”?
    • 而且我写代码的时候用不了。
    • @hypirea 6.048e+8 是一个以科学计数法 (6.048 * 10^8) 表示的double。使用这种方法,我个人将完全避免使用doubles,并将不可读(且容易出错)的幻数替换为const msInWeek = 7 * 24 * 60 * 60 * 1000 之类的东西。我也会使用截断除法 (~/) 而不是使用floor()
    • 先生,非常感谢。你做到了。
    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2011-11-20
    • 2022-11-17
    • 2014-04-13
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多