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 对象创建一个新 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 范围之外的 month),这可能影响更重要的属性(例如,月份为 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,
  );
}