Files
GitJournal/lib/utils/datetime.dart
2021-05-17 13:34:04 +02:00

83 lines
1.8 KiB
Dart

import 'dart:core';
import 'package:intl/intl.dart';
import 'package:gitjournal/utils/logger.dart';
final _dateOnlyFormat = DateFormat("yyyy-MM-dd");
final _simpleDateFormat = DateFormat("yyyy-MM-dd-HH-mm-ss");
final _iso8601DateFormat = DateFormat("yyyy-MM-ddTHH:mm:ss");
final _zettleDateFormat = DateFormat("yyyyMMddHHmmss");
String toDateString(DateTime dt) {
return _dateOnlyFormat.format(dt);
}
String toSimpleDateTime(DateTime dt) {
return _simpleDateFormat.format(dt);
}
String toIso8601(DateTime dt) {
return _iso8601DateFormat.format(dt);
}
String toZettleDateTime(DateTime dt) {
return _zettleDateFormat.format(dt);
}
String toIso8601WithTimezone(DateTime dt, [Duration? offset]) {
var result = _iso8601DateFormat.format(dt);
offset = offset ?? dt.timeZoneOffset;
int minutes = (offset.inMinutes % 60);
int hours = offset.inHours.toInt();
String sign = '+';
if (hours < 0) {
hours = hours < 0 ? hours * -1 : hours;
minutes = minutes < 0 ? minutes * -1 : minutes;
sign = '-';
}
String hourStr;
if (hours < 10) {
hourStr = '0' + hours.toString();
} else {
hourStr = hours.toString();
}
String minutesStr;
if (minutes < 10) {
minutesStr = '0' + minutes.toString();
} else {
minutesStr = minutes.toString();
}
return result + sign + hourStr + ':' + minutesStr;
}
DateTime? parseDateTime(String str) {
DateTime? dt;
try {
dt = DateTime.parse(str).toLocal();
} catch (ex) {
// Ignore it
}
if (dt == null) {
var regex = RegExp(
r"(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})\+(\d{2})\:(\d{2})");
if (regex.hasMatch(str)) {
// FIXME: Handle the timezone!
str = str.substring(0, 19);
try {
dt = DateTime.parse(str);
} catch (ex) {
Log.d("Note Date Parsing Failed: $ex");
}
}
}
return dt;
}