Skip to content

Commit ce983c2

Browse files
authored
Merge pull request #991 from wger-project/fix/timezone-handling
Properly handle timezones (again)
2 parents 7589160 + fc881c4 commit ce983c2

File tree

25 files changed

+130
-118
lines changed

25 files changed

+130
-118
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ jobs:
1616
test:
1717
name: Run tests
1818
runs-on: ubuntu-latest
19+
env:
20+
TZ: Europe/Berlin
1921
steps:
2022
- uses: actions/checkout@v5
2123

lib/helpers/date.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
1818

19-
/// Returns a timezone aware DateTime object from a date and time string.
20-
DateTime getDateTimeFromDateAndTime(String date, String time) {
21-
return DateTime.parse('$date $time');
22-
}
23-
2419
/// Returns a list of [DateTime] objects from [first] to [last], inclusive.
2520
List<DateTime> daysInRange(DateTime first, DateTime last) {
2621
final dayCount = last.difference(first).inDays + 1;

lib/helpers/json.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ String dateToUtcIso8601(DateTime dateTime) {
6262
return dateTime.toUtc().toIso8601String();
6363
}
6464

65+
/// Converts an ISO8601 datetime string in UTC to a local DateTime object.
66+
///
67+
/// Needs to be used in conjunction with [dateToUtcIso8601] in the models to
68+
/// correctly handle timezones.
69+
DateTime utcIso8601ToLocalDate(String dateTime) {
70+
return DateTime.parse(dateTime).toLocal();
71+
}
72+
6573
/*
6674
* Converts a time to a date object.
6775
* Needed e.g. when the wger api only sends a time but no date information.

lib/models/body_weight/weight_entry.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class WeightEntry {
2929
@JsonKey(required: true, fromJson: stringToNum, toJson: numToString)
3030
late num weight = 0;
3131

32-
@JsonKey(required: true)
32+
@JsonKey(required: true, fromJson: utcIso8601ToLocalDate, toJson: dateToUtcIso8601)
3333
late DateTime date;
3434

3535
WeightEntry({this.id, weight, DateTime? date}) {

lib/models/body_weight/weight_entry.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/models/gallery/image.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class Image {
2626
@JsonKey(required: true)
2727
int? id;
2828

29-
@JsonKey(required: true, toJson: dateToYYYYMMDD)
29+
@JsonKey(required: true, fromJson: utcIso8601ToLocalDate, toJson: dateToUtcIso8601)
3030
late DateTime date;
3131

3232
@JsonKey(required: true, name: 'image')

lib/models/gallery/image.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/models/nutrition/log.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Log {
3636
@JsonKey(required: true, name: 'plan')
3737
int planId;
3838

39-
@JsonKey(required: true, toJson: dateToUtcIso8601)
39+
@JsonKey(required: true, fromJson: utcIso8601ToLocalDate, toJson: dateToUtcIso8601)
4040
late DateTime datetime;
4141

4242
String? comment;

lib/models/nutrition/log.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/models/nutrition/nutritional_plan.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@ class NutritionalPlan {
4141
@JsonKey(required: true)
4242
late String description;
4343

44-
@JsonKey(required: true, name: 'creation_date', toJson: dateToUtcIso8601)
44+
@JsonKey(
45+
required: true,
46+
name: 'creation_date',
47+
fromJson: utcIso8601ToLocalDate,
48+
toJson: dateToUtcIso8601,
49+
)
4550
late DateTime creationDate;
4651

4752
@JsonKey(required: true, name: 'start', toJson: dateToYYYYMMDD)

0 commit comments

Comments
 (0)