Flutter Dart 문법 - 현재 시간 구하기, 시간 입력하기, 날짜 시간 비교하기

반응형

 

현재 시간 구하기

  • DateTime.now()
    • 현재 시간을 날짜 시간순으로 나타냅니다.
    • 초(second)는 밀리초까지 표현됩니다.
DateTime currentTime = DateTime.now();
print('##### now : $currentTime');

// I/flutter ( 2765): ##### now : 2023-08-25 05:56:36.318863

시간 입력하기

  • DateTime(Year, Month, Day, Hour, Minute, Second, Millisecond)
    • 원하는 형식에 맞게 시간을 입력합니다.
    • 차례대로 입력하며 생략된 부분은 0으로 채워집니다.
DateTime date1 = DateTime(2023, 8, 25);
print('##### date1 : $date1');

// I/flutter ( 2765): ##### date1 : 2023-08-25 00:00:00.000

문자열 변수를 시계열 타입으로 변환하기

  • DateTime.parse(String)
    • parse를 이용하여 문자열의 데이터를 DateTime 타입으로 변경합니다.
// 현재 시간을 문자열 변수에 저장
String strNow = DateTime.now().toString();

// 문자열 타입으로 저장된 시간을 parse를 통해 시계열 변수로 변환
DateTime nowTime = DateTime.parse(strNow);

print('##### now : $nowTime');
// I/flutter ( 2765): ##### now : 2023-08-25 07:47:18.209405

현재 시간을 원하는 형태로 시간 지정하기

  • DateTime(현재시간)
    • 현재 시간을 저장한 후, 저장된 시계열 변수의 속성을 이용하여 원하는 날짜와 시간을 표현합니다.
DateTime currentTime = DateTime.now();

DateTime nowDate =
  DateTime(currentTime.year, currentTime.month, currentTime.day);
print("##### nowDate : $nowDate");

// I/flutter ( 2765): ##### nowDate : 2023-08-25 00:00:00.000

날짜와 시간 비교하기

  • Duration 클래스의 속성 활용 (예: Duration.inDay)
    • 특정 시점 간의 차이를 나타내는 Duration 클래스의 difference 메서드를 활용합니다.
    • Duration 클래스의 속성을 활용하여 시간 차이를 구합니다.
    • 시간 차이는 지정한 속성에 따라 반환되는 값이 다릅니다. (예: inDay=일 수 반환, inSecond=초 반환)
// 현재 시간 구하기
DateTime currentTime = DateTime.now();
print('##### now : $currentTime');

// 현재 날짜 년월일만 입력하기
DateTime date1 = DateTime(2023, 8, 25);
print('##### date1 : $date1');

// 비교할 날짜 대입하기
DateTime nowDate = DateTime(currentTime.year, currentTime.month,
  currentTime.day, currentTime.hour, currentTime.minute);
print("##### nowDate : $nowDate");

// 시간 비교하기
Duration diffTime = date1.difference(nowDate);
print('##### diffTime 일 비교 : ${diffTime.inDays}');
print('##### diffTime 시 비교 : ${diffTime.inHours}');
print('##### diffTime 분 비교 : ${diffTime.inMinutes}');

// I/flutter ( 2765): ##### now : 2023-08-25 06:22:51.484116
// I/flutter ( 2765): ##### date1 : 2023-08-25 00:00:00.000
// I/flutter ( 2765): ##### nowDate : 2023-08-25 06:22:00.000
// I/flutter ( 2765): ##### diffTime 일 비교 : 0
// I/flutter ( 2765): ##### diffTime 시 비교 : -6
// I/flutter ( 2765): ##### diffTime 분 비교 : -382 -> 6시 22분이므로 분으로 계산하여 382분

시간 비교 Error

시간이 하루가 차이나는데도 비교된 시간은 같다고(0) 뜹니다. 어째서일까요.

  • 오류가 나는 소스 코드
  • 기준 시간 Day : 26일 // 비교 시간 Day : 25일
  • >>> 1일 차이가 나야함
DateTime date1 = DateTime(2023, 8, 26);
print('##### date1 : $date1');

DateTime currentTime = DateTime.now();
DateTime nowDate = DateTime(currentTime.year, currentTime.month,
  currentTime.day, currentTime.hour, currentTime.minute);
print("##### nowDate : $nowDate");

Duration diffTime = date1.difference(nowDate);
print('##### diffTime 일 비교 : ${diffTime.inDays}');

// I/flutter ( 2765): ##### date1 : 2023-08-26 00:00:00.000
// I/flutter ( 2765): ##### nowDate : 2023-08-25 07:05:00.000
// I/flutter ( 2765): ##### diffTime 일 비교 : 0 -> 1이 떠야하지만 0으로 출력되는 에러
// I/flutter ( 2765): ##### diffTime 시 비교 : 16
// I/flutter ( 2765): ##### diffTime 분 비교 : 1015

 
시간 비교 시, 가능하면 비교하는 시계열 타입의 형식을 맞춰주는 것이 좋습니다.
코드에서는 기준이되는 시계열은 연,월,일 만 기재되었으나
정의한 현재 시간에서는 연,월,일,시,분 이 기재되어 있습니다.
이럴 경우, 올바른 비교가 되지 않을 수 있습니다.
시계열 타입의 형식을 맞춰 다시 확인해보면 정상작동하는 것을 확인할 수 있습니다.

  • 수정 코드
DateTime date1 = DateTime(2023, 8, 26);
print('##### date1 : $date1');

DateTime currentTime = DateTime.now();
// date1 변수의 시간 형식에 맞게 맞추기 : 연월일
DateTime nowDate = DateTime(currentTime.year, currentTime.month, currentTime.day);
print("##### nowDate : $nowDate");

Duration diffTime = date1.difference(nowDate);
print('##### diffTime 일 비교 : ${diffTime.inDays}');

// I/flutter ( 2765): ##### date1 : 2023-08-26 00:00:00.000
// I/flutter ( 2765): ##### nowDate : 2023-08-25 07:05:00.000
// I/flutter ( 2765): ##### diffTime 일 비교 : 1 -> 정상적으로 하루 차이나는 것을 확인
// I/flutter ( 2765): ##### diffTime 시 비교 : 16
// I/flutter ( 2765): ##### diffTime 분 비교 : 1015

 

반응형