#flutter #dart
Вопрос:
У меня есть 2 раза, которые мне нужно вычесть, и я почти близок, но есть одна большая проблема
У меня есть 2 раза в строке, например, 10:00 утра и 10:00 вечера
И мой код такой
var df = DateFormat("hh:mm");
var durationStart = DateFormat('HH:mm').format(df.parse(10:00AM));
var durationEnd = DateFormat('HH:mm').format(df.parse(10:00PM));
print('durationStart ${durationStart}');
print('durationEnd ${durationEnd}');
var Startparts = durationStart.split(':');
var startDurationSet = Duration(hours: int.parse(Startparts[0].trim()), minutes: int.parse(Startparts[1].trim()));
var Endparts = durationEnd.split(':');
var endDurationSet = Duration(hours: int.parse(Endparts[0].trim()), minutes: int.parse(Endparts[1].trim()));
print('startDurationSet ${startDurationSet}');
var result = Duration(hours: int.parse(Endparts[0].trim()) - int.parse(Startparts[0].trim()) , minutes: int.parse(Startparts[1].trim()) - int.parse(Endparts[1].trim()));
print('result ${result.toString().replaceAll('-', '')}');
Таким образом, у меня есть 2 раза, один из которых-время начала, а другой-время окончания. Мне просто нужна разница между часами. например, у меня есть 10:00 утра и 01:00 вечера, мне нужно 3 часа, но он показывает 9 часов. Но то, что я получаю, если у меня есть 10:00 утра и 10:00 вечера, он показывает 0 часов, но должен показывать 12. То же
Комментарии:
1. Как насчет того, чтобы вы создали метод, который выполняет все вычисления, например, каждые 60 минут = 1 час?
2. Я создал класс utils. Вы можете проверить мой ответ. Если это полезно для вас, пожалуйста, примите.
Ответ №1:
Это легко, если вы можете правильно указать дату начала и окончания в DateTime
Подсказка, я использую "hh:mma"
, так как это ваш исходный формат => "10:00AM"
Если я использую "HH:mm"
, как вы, я всегда буду получать одно и то же время, так как оно не анализирует AM/PM после 10:00
// Get your time in term of date time
DateTime startDate = DateFormat("hh:mma").parse("10:00AM");
DateTime endDate = DateFormat("hh:mma").parse("10:00PM");
// Get the Duration using the diferrence method
Duration dif = endDate.difference(startDate);
// Print the result in any format you want
print(dif.toString(); // 12:00:00.000000
print(dif.inHours); // 12
Ответ №2:
Вы ищете что-то подобное?
TimeOfDay _calcTimeOfDay(int hour, int minute) {
if (minute > 60) {
minute = (minute % 60);
hour = 1;
}
return TimeOfDay(hour: hour, minute: minute);
}
Проблема в том, что если у вас есть час=24 и минута=75, то час будет равен 25, что не является допустимым часом.
Не уверен, что я полностью понимаю вопрос, может быть, вы сможете предоставить больше информации.
Ответ №3:
Что вам нужно добавить в свой формат даты, так это код для маркера am/pm: a
. Используя либо формат hh:mma
, либо h:ma
должен работать.
Затем вы можете использовать DateTime.difference()
для расчета разницы во времени от durationStart и durationEnd. Вот пример, который вы можете запустить на DartPad.
import 'package:intl/intl.dart';
void main() {
/// Set the format that of the Date/Time that like to parse
/// h - 12h in am/pm
/// m - minute in hour
/// a - am/pm marker
/// See more format here: https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html
var dateFormat = DateFormat('h:ma');
DateTime durationStart = dateFormat.parse('10:00AM');
DateTime durationEnd = dateFormat.parse('10:00PM');
print('durationStart: $durationStart');
print('durationEnd: $durationEnd');
/// Fetch the difference using DateTime.difference()
/// https://api.flutter.dev/flutter/dart-core/DateTime/difference.html
print('difference: ${durationEnd.difference(durationStart).inHours}');
}
Ответ №4:
Пакет использования
международный: ^0.17.0
импорт ‘пакет:международный/международный дротик’;
var dateFormat = DateFormat('h:ma');
DateTime durationStart = dateFormat.parse('10:00AM');
DateTime durationEnd = dateFormat.parse('1:00PM');
print('durationStart: $durationStart');
print('durationEnd: $durationEnd');
var differenceInHours = durationEnd.difference(durationStart).inHours;
print('difference: $differenceInHours hours');
Ответ №5:
Я создал для вас один класс:
import 'package:intl/intl.dart';
class DateUtils {
static String getTimeDifference(String startTime, String endTime){
/// Set the format that of the Date/Time that like to parse
/// h - 12h in am/pm
/// m - minute in hour
/// a - am/pm marker
/// See more format here: https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html
var dateFormat = DateFormat('h:ma');
DateTime durationStart = dateFormat.parse(startTime);
DateTime durationEnd = dateFormat.parse(endTime);
return '${durationEnd.difference(durationStart).inHours} hours';
}
}
Как вы можете использовать:
void main() {
print("10:00PM, 10:30PM => " DateUtils.getTimeDifference("10:00PM", "10:30PM"));
print("12:00AM, 04:00AM => " DateUtils.getTimeDifference("12:00AM", "04:00AM"));
print("01:00AM, 03:00AM => " DateUtils.getTimeDifference("01:00AM", "03:00AM"));
print("12:00AM, 06:00PM => " DateUtils.getTimeDifference("12:00AM", "06:00PM"));
print("04:00PM, 03:00PM => " DateUtils.getTimeDifference("04:00PM", "03:00PM"));
}
Выход:
10:00PM, 10:30PM => 0 hours
12:00AM, 04:00AM => 4 hours
01:00AM, 03:00AM => 2 hours
12:00AM, 06:00PM => 18 hours
04:00PM, 03:00PM => -1 hours
Надеюсь, это будет полезно.