Flutter/기본

[Flutter] 특수상황의 DateTime UTC -> UTC 변환

주톨 2024. 5. 9. 21:36
728x90

 

 

외부에서 UTC 시간을 받아와서 사용할 때 일반적으로 ISO8601 형식으로 주지만 때때로는

"2023-08-08T06:06:29" 이렇게 Z가 붙지 않거나 "2023-08-08 06:06:29" 이런식으로 받아오는 경우가 있습니다.

 

이런 시간을 toUtc()를 해서 Utc시간으로 바꾸게 된다면 사용 국가 표준시 만큼 추가로 계산됩니다.

예로 들어 한국은 UTC+9 한국 표준시를 가지고 있기 때문에 "2023-08-08T06:06:29" 해당 DateTime을 toUtc()하게 된다면 2023-08-07 21:06:29.000Z 이렇게 바뀌는 현상이 생깁니다.

 

받아온 UTC시간을 그대로 UTC로 변환하려면 아래 코드를 이용하면 됩니다.

Z가 붙으면 dart에서는 UTC시간으로 인식합니다.

 

DateTime parseUTCDateTime(String value) {
  List<String> parts =
      value.contains('T') ? value.split('T') : value.split(' ');
  if (parts.length == 2) {
    final timePart = parts[1];
    if (timePart.endsWith('Z') ||
        timePart.contains('+') ||
        timePart.contains('-')) {
      return DateTime.parse(value);
    } else {
      return DateTime.parse('${value}Z');
    }
  }
  return DateTime.parse(value);
}