Fix dateTime to string with timezone

We should just use the 'timezone' dart package and not handle this
ourselves as we're probably fucking it up in other places.

This fixes #42
This commit is contained in:
Vishesh Handa
2019-12-09 01:56:46 +01:00
parent a33fb88fb0
commit ad6d47ef0f
2 changed files with 45 additions and 8 deletions

View File

@ -1,21 +1,22 @@
import 'dart:core';
import 'package:intl/intl.dart';
String toIso8601(DateTime dt) {
return DateFormat("yyyy-MM-ddTHH:mm:ss").format(dt);
}
String toIso8601WithTimezone(DateTime dt) {
String toIso8601WithTimezone(DateTime dt, [Duration offset]) {
var result = DateFormat("yyyy-MM-ddTHH:mm:ss").format(dt);
var offset = dt.timeZoneOffset;
offset = offset ?? dt.timeZoneOffset;
int minutes = (offset.inMinutes % 60);
int hours = offset.inHours.toInt();
String minutesStr;
if (minutes < 10) {
minutesStr = '0' + minutes.toString();
} else {
minutesStr = minutes.toString();
String sign = '+';
if (hours < 0) {
hours = hours < 0 ? hours * -1 : hours;
minutes = minutes < 0 ? minutes * -1 : minutes;
sign = '-';
}
String hourStr;
@ -25,5 +26,12 @@ String toIso8601WithTimezone(DateTime dt) {
hourStr = hours.toString();
}
return result + '+' + hourStr + ':' + minutesStr;
String minutesStr;
if (minutes < 10) {
minutesStr = '0' + minutes.toString();
} else {
minutesStr = minutes.toString();
}
return result + sign + hourStr + ':' + minutesStr;
}

View File

@ -16,5 +16,34 @@ void main() {
expect(str, "2011-06-06T05:05:03+00:00");
});
test('Test with positive offset', () {
var dateTime = DateTime.utc(2011, 6, 6, 5, 5, 3);
var str = toIso8601WithTimezone(dateTime, Duration(hours: 2));
expect(str, "2011-06-06T05:05:03+02:00");
});
test('Test with positive offset and minutes', () {
var dateTime = DateTime.utc(2011, 6, 6, 5, 5, 3);
var str = toIso8601WithTimezone(dateTime, Duration(hours: 10));
expect(str, "2011-06-06T05:05:03+10:00");
});
test('Test with negative offset', () {
var dateTime = DateTime.utc(2011, 6, 6, 5, 5, 3);
var str = toIso8601WithTimezone(dateTime, Duration(hours: -5));
expect(str, "2011-06-06T05:05:03-05:00");
});
test('Test with negative offset and minutes', () {
var dateTime = DateTime.utc(2011, 6, 6, 5, 5, 3);
var str =
toIso8601WithTimezone(dateTime, Duration(hours: -11, minutes: -30));
expect(str, "2011-06-06T05:05:03-11:30");
});
});
}