mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-28 01:45:55 +08:00
Write the date time in iso8601 + timezone
This is not perfect as when parsing the datetime, we're ignoring the timezone.
This commit is contained in:
28
lib/datetime_utils.dart
Normal file
28
lib/datetime_utils.dart
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
String toIso8601WithTimezone(DateTime dt) {
|
||||||
|
var result = DateFormat("y-M-dTH:m:s").format(dt);
|
||||||
|
var offset = dt.timeZoneOffset;
|
||||||
|
if (offset.inSeconds == 0) {
|
||||||
|
return result + 'Z';
|
||||||
|
} else {
|
||||||
|
int minutes = (offset.inMinutes % 60);
|
||||||
|
int hours = offset.inHours.toInt();
|
||||||
|
|
||||||
|
String minutesStr;
|
||||||
|
if (minutes < 10) {
|
||||||
|
minutesStr = '0' + minutes.toString();
|
||||||
|
} else {
|
||||||
|
minutesStr = minutes.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
String hourStr;
|
||||||
|
if (hours < 10) {
|
||||||
|
hourStr = '0' + hours.toString();
|
||||||
|
} else {
|
||||||
|
hourStr = hours.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result + '+' + hourStr + ':' + minutesStr;
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
import 'package:journal/datetime_utils.dart';
|
||||||
|
|
||||||
typedef NoteAdder(Note note);
|
typedef NoteAdder(Note note);
|
||||||
typedef NoteRemover(Note note);
|
typedef NoteRemover(Note note);
|
||||||
typedef NoteUpdator(Note note);
|
typedef NoteUpdator(Note note);
|
||||||
@ -12,24 +14,51 @@ class Note implements Comparable {
|
|||||||
factory Note.fromJson(Map<String, dynamic> json) {
|
factory Note.fromJson(Map<String, dynamic> json) {
|
||||||
String id;
|
String id;
|
||||||
if (json.containsKey("id")) {
|
if (json.containsKey("id")) {
|
||||||
var val = json["id"];
|
id = json["id"].toString();
|
||||||
if (val.runtimeType == String) {
|
}
|
||||||
id = val;
|
|
||||||
} else {
|
DateTime created;
|
||||||
id = val.toString();
|
if (json.containsKey("created")) {
|
||||||
|
var createdStr = json['created'].toString();
|
||||||
|
try {
|
||||||
|
created = DateTime.parse(json['created']);
|
||||||
|
} catch (ex) {}
|
||||||
|
|
||||||
|
if (created == null) {
|
||||||
|
var regex = new RegExp(
|
||||||
|
r"(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})\+(\d{2})\:(\d{2})");
|
||||||
|
if (regex.hasMatch(createdStr)) {
|
||||||
|
// FIXME: Handle the timezone!
|
||||||
|
createdStr = createdStr.substring(0, 19);
|
||||||
|
created = DateTime.parse(json['created']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: Get created from file system or from git!
|
||||||
|
if (created == null) {
|
||||||
|
created = DateTime.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (id == null && created != null) {
|
||||||
|
id = toIso8601WithTimezone(created);
|
||||||
|
}
|
||||||
|
|
||||||
|
String body = "";
|
||||||
|
if (json.containsKey("body")) {
|
||||||
|
body = json['body'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Note(
|
return new Note(
|
||||||
id: id,
|
id: id,
|
||||||
created: DateTime.parse(json['created']),
|
created: created,
|
||||||
body: json['body'],
|
body: body,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
return {
|
return {
|
||||||
"created": created.toIso8601String(),
|
"created": toIso8601WithTimezone(created),
|
||||||
"body": body,
|
"body": body,
|
||||||
"id": id,
|
"id": id,
|
||||||
};
|
};
|
||||||
|
@ -12,6 +12,7 @@ import 'package:journal/note.dart';
|
|||||||
import 'package:journal/storage/notes_repository.dart';
|
import 'package:journal/storage/notes_repository.dart';
|
||||||
import 'package:journal/storage/git_storage.dart';
|
import 'package:journal/storage/git_storage.dart';
|
||||||
import 'package:journal/storage/git.dart';
|
import 'package:journal/storage/git.dart';
|
||||||
|
import 'package:journal/datetime_utils.dart';
|
||||||
|
|
||||||
Future<Directory> getNotesDir() async {
|
Future<Directory> getNotesDir() async {
|
||||||
var appDir = await getGitBaseDirectory();
|
var appDir = await getGitBaseDirectory();
|
||||||
@ -49,7 +50,7 @@ class StateContainerState extends State<StateContainer> {
|
|||||||
getDirectory: getNotesDir,
|
getDirectory: getNotesDir,
|
||||||
dirName: "journal",
|
dirName: "journal",
|
||||||
gitCloneUrl: "root@bcn.vhanda.in:git/test",
|
gitCloneUrl: "root@bcn.vhanda.in:git/test",
|
||||||
fileNameGenerator: (Note n) => n.created.toIso8601String(),
|
fileNameGenerator: (Note n) => toIso8601WithTimezone(n.created),
|
||||||
);
|
);
|
||||||
|
|
||||||
StateContainerState(bool onBoardingCompleted) {
|
StateContainerState(bool onBoardingCompleted) {
|
||||||
|
13
test/datetime_utils_test.dart
Normal file
13
test/datetime_utils_test.dart
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import 'package:test/test.dart';
|
||||||
|
import 'package:journal/datetime_utils.dart';
|
||||||
|
|
||||||
|
main() {
|
||||||
|
group('DateTime Utils', () {
|
||||||
|
test('Test random date', () {
|
||||||
|
var dateTime = DateTime.utc(2011, 12, 23, 10, 15, 30);
|
||||||
|
var str = toIso8601WithTimezone(dateTime);
|
||||||
|
|
||||||
|
expect(str, "2011-12-23T10:15:30+00:00");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
Reference in New Issue
Block a user