copyWith 方法

DateTime copyWith({
  1. int? year,
  2. int? month,
  3. int? day,
  4. int? hour,
  5. int? minute,
  6. int? second,
  7. int? millisecond,
  8. int? microsecond,
  9. bool? isUtc,
})

通过更新单个属性创建一个新的 DateTime 对象。

copyWith 方法创建一个新的 DateTime 对象,其中包含由类似命名的参数提供的属性值,如 DateTime.yearDateTime.hour 等,如果没有提供参数或提供 null,则使用属性的现有值。

示例

final now = DateTime.now();
final sameTimeOnMoonLandingDay =
    now.copyWith(year: 1969, month: 07, day: 20);

DateTimeDateTime.utc 构造函数类似,该操作使用它们来创建新值,属性值允许溢出或下溢属性的取值范围(例如,1 到 12 范围之外的月份),这可能会影响更重要的属性(例如,13 月份将导致下一年的一月)。

注意,如果结果是本地时间的 DateTime,则季节性时区调整(夏令时)可能会导致某些日期、小时和分钟的组合不存在,或者存在多次。在前一种情况下,使用两个相邻时区中的一个的时间代替。在后一种情况下,选择两个选项之一。

实现

DateTime copyWith({
  int? year,
  int? month,
  int? day,
  int? hour,
  int? minute,
  int? second,
  int? millisecond,
  int? microsecond,
  bool? isUtc,
}) {
  return ((isUtc ?? this.isUtc) ? DateTime.utc : DateTime.new)(
    year ?? this.year,
    month ?? this.month,
    day ?? this.day,
    hour ?? this.hour,
    minute ?? this.minute,
    second ?? this.second,
    millisecond ?? this.millisecond,
    microsecond ?? this.microsecond,
  );
}