[Flutter] 시간 관련 메소드(Duration, isNegative)

개발 기록·2024년 8월 9일

Flutter

목록 보기
15/18

총 소요 시간을 구하기 위해 시작 시간과 종료 시간의 차이를 구하는 방법을 알아 봤다.

duration

  • dart에서 시간의 양을 나타내기 위해 사용되는 클래스로, 두 시간 간의 차이를 나타대거나 특정 시간 길이를 정의할 때 사용함
  • 주요 속성 및 메서드
    inDays: Duration을 일 단위로 반환합니다.
    inHours: Duration을 시간 단위로 반환합니다.
    inMinutes: Duration을 분 단위로 반환합니다.
    nSeconds: Duration을 초 단위로 반환합니다.
    inMilliseconds: Duration을 밀리초 단위로 반환합니다.
    inMicroseconds: Duration을 마이크로초 단위로 반환합니다.
    difference: 두 DateTime 객체 간의 차이를 Duration으로 반환합니다.
  • 예시
DateTime startTime = DateTime(2024, 8, 9, 10, 0); // 2024년 8월 9일 오전 10시
DateTime endTime = DateTime(2024, 8, 9, 12, 30); // 2024년 8월 9일 오후 12시 30분

Duration duration = endTime.difference(startTime); //2:30:00.000000
print(duration.inHours); // 2 (전체 시간)
print(duration.inMinutes); // 150 (전체 분)

즉 dateTime을 어떤 형식으로 나타낼건지를 설정할 수 있는 메소드!

isNegative

  • Duration 객체의 속성 중 하나로, duration이 음수인지 여부 확인 (즉 duration이 0보다 작은가?)
  • 시간 차이 계산시, 종료시간<시작시간 인지를 확인할 때 자주 사용됨
  • 종료 시간이 시작시간 보다 크면 duration이 음수가 되어 true 반환
  • 예시
DateTime startTime = DateTime(2024, 8, 9, 15, 0); // 2024년 8월 9일 오후 3시
DateTime endTime = DateTime(2024, 8, 9, 14, 0); // 2024년 8월 9일 오후 2시

Duration duration = endTime.difference(startTime);
print(duration.isNegative); // true (음수이기 때문)

관련 최종 코드

Obx(() {
                final startTime = c.startTime.value;
                final endTime = c.endTime.value;

                // 시작 시간과 종료 시간을 DateTime으로 변환하여 차이 계산
                final startDateTime = DateTime(selectDay.year, selectDay.month,
                    selectDay.day, startTime.hour, startTime.minute);
                final endDateTime = DateTime(selectDay.year, selectDay.month,
                    selectDay.day, endTime.hour, endTime.minute);

                // 두 시간 사이의 Duration 계산
                final duration = endDateTime.difference(startDateTime);
                final durationText = duration.isNegative
                    ? "잘못된 시간 설정"
                    : "${duration.inHours}시간 ${duration.inMinutes % 60}분";
                return Text(
                  "총 소요시간: $durationText",
                  style: TextStyle(fontSize: 12, color: Colors.black),
                );
              }),

결과


종료시간이 시작시간보다 빠를때! 이 경우에 대한 유효성 검사(?)를 추후에 추가해야겠다

0개의 댓글