【问题标题】:Dart - How to set the hour and minute of DateTime objectDart - 如何设置 DateTime 对象的小时和分钟
【发布时间】:2019-03-08 17:44:30
【问题描述】:

如何设置/更改 DateTime 对象的小时和/或分钟。类似于 JavaScript 中的Date.setHours(..)

例如,如果我这样做了

var time = DateTime.parse("2018-08-16T11:00:00.000Z");

如何设置time的小时和分钟

【问题讨论】:

    标签: android dart flutter


    【解决方案1】:
    var newHour = 5;
    time = time.toLocal();
    time = new DateTime(time.year, time.month, time.day, newHour, time.minute, time.second, time.millisecond, time.microsecond);
    

    曾讨论过要添加一个update() 方法,该方法只允许修改特定部分,但看起来这还没有实现。

    【讨论】:

    • 谢谢,但这是我已经在做的。正在寻找更有效的方法。
    • 已经完成了一些工作,但还没有进入 SDK github.com/dart-lang/sdk/pull/24646。如果您经常需要,您可以自己创建一个方便的函数来使这些事情变得更容易。
    • 另一种更改日期的方法 - time.add(Duration(hours: 2, minutes: 30)),但我怀疑它是否是解决方案。我不知道另一种更改日期时间的方法
    • @AndreyTurkovsky 这取决于你想要什么。当达到夏令时边界时,添加/删除持续时间可能会产生令人惊讶的效果。
    【解决方案2】:

    您也可以通过使用此包Jiffy 对日期时间添加或减去来做到这一点。它还尊重闰年和每个月有多少天

    var updateTime = Jiffy("2018-08-16T11:00:00.000Z").add(hours: 1); // 2018-08-16 12:00:00.000Z
    
    print(updateTime.dateTime); // 2018-08-16 12:30:00.000Z
    
    // also you can format it
    print(updateTime.format("yyyy, MMM")); // 2018, Aug
    
    // or use default formats
    print(updateTime.yMMMEdjm); // Thu, Aug 16, 2018 12:30 PM
    

    【讨论】:

    • 我们可以用这个包来打发时间吗?
    【解决方案3】:

    现在有了扩展你可以做这样的事情

    extension MyDateUtils on DateTime {
      DateTime copyWith({
        int? year,
        int? month,
        int? day,
        int? hour,
        int? minute,
        int? second,
        int? millisecond,
        int? microsecond,
      }) {
        return DateTime(
          year ?? this.year,
          month ?? this.month,
          day ?? this.day,
          hour ?? this.hour,
          minute ?? this.minute,
          second ?? this.second,
          millisecond ?? this.millisecond,
          microsecond ?? this.microsecond,
        );
      }
    }
    

    【讨论】:

    • 如何使用这个来制作变量?
    • 它用于复制您的旧值并更改字段:final newVariable = oldValue.copyWith(year: oldValue.year+1);
    • 上面的例子是正确的,但不会编译为空安全确保在每个变量类型后添加一个?。例如:int? year
    • 是的,我应该更新它
    【解决方案4】:

    我相信这是一个比公认答案更好的解决方案:

    DateTime dateTime = DateFormat('dd-MM-yyyy h:mm:ssa', 'en_US').parseLoose('01-11-2020 2:00:00AM');
    

    【讨论】:

    • 为什么一个涉及解析的方法更好?
    【解决方案5】:

    我有一个更简单的解决方案:

    DateTime newDate = DateTime.now();
    DateTime formatedDate = newDate.subtract(Duration(hours: newDate.hour, minutes: newDate.minute, seconds: newDate.second, milliseconds: newDate.millisecond, microseconds: newDate.microsecond));
    

    那么 'formatedDate' 中的 XX:XX 应该是 00:00

    解释:

    formatedDate 是一个新的 DateTime 变量,其内容为 newDate 减去小时、分钟...

    【讨论】:

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