offsetFor method

NamedZoneOffset offsetFor(
  1. HasInstant instant
)

Implementation

NamedZoneOffset offsetFor(HasInstant instant) {
  var namedStdOffset =
      NamedZoneOffset.fromZoneOffset(stdName, false, stdOffset);
  if (dstName == null) {
    return namedStdOffset;
  }

  var namedDstOffset =
      NamedZoneOffset.fromZoneOffset(dstName!, true, dstOffset!);

  var std = OffsetDateTime.fromInstant(instant, stdOffset).toLocal();
  var dst = OffsetDateTime.fromInstant(instant, dstOffset!).toLocal();
  var dstStart = dstStartRule!.forYear(std.year);
  var stdStart = stdStartRule!.forYear(std.year);

  if (dstStart < stdStart) {
    if (std >= dstStart && dst < stdStart) {
      return namedDstOffset;
    } else {
      return namedStdOffset;
    }
  } else {
    // "Winter time." Hello, Ireland. :-)
    if (std >= stdStart && dst < dstStart) {
      return namedStdOffset;
    } else {
      return namedDstOffset;
    }
  }
}