mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-07-15 07:56:11 +08:00
83 lines
1.8 KiB
Dart
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;
|
|
}
|