timestampToRfc3339 static method

String timestampToRfc3339(
  1. int seconds,
  2. int nanos
)

Implementation

static String timestampToRfc3339(int seconds, int nanos) {
  if (nanos < 0 || nanos > 999999999) {
    throw ArgumentException.invalidOperationArguments(
      "timestampToRfc3339",
      reason: 'nanos must be between 0 and 999999999',
    );
  }
  final dt = DateTime.fromMillisecondsSinceEpoch(seconds * 1000, isUtc: true);
  String two(int n) => n.toString().padLeft(2, '0');
  String four(int n) => n.toString().padLeft(4, '0');
  final buffer =
      StringBuffer()
        ..write(four(dt.year))
        ..write('-')
        ..write(two(dt.month))
        ..write('-')
        ..write(two(dt.day))
        ..write('T')
        ..write(two(dt.hour))
        ..write(':')
        ..write(two(dt.minute))
        ..write(':')
        ..write(two(dt.second));

  if (nanos != 0) {
    var frac = nanos.toString().padLeft(9, '0');

    // RFC3339 / protobuf JSON:
    // remove trailing zeros
    frac = frac.replaceFirst(RegExp(r'0+$'), '');

    buffer
      ..write('.')
      ..write(frac);
  }

  buffer.write('Z');

  return buffer.toString();
}