104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flutter/widgets.dart';
 | |
| import 'package:relative_time/relative_time.dart';
 | |
| 
 | |
| extension DurationFormatter on Duration {
 | |
|   String formatDuration() {
 | |
|     final isNegative = inMicroseconds < 0;
 | |
|     final positiveDuration = isNegative ? -this : this;
 | |
| 
 | |
|     final hours = positiveDuration.inHours.toString().padLeft(2, '0');
 | |
|     final minutes = (positiveDuration.inMinutes % 60).toString().padLeft(
 | |
|       2,
 | |
|       '0',
 | |
|     );
 | |
|     final seconds = (positiveDuration.inSeconds % 60).toString().padLeft(
 | |
|       2,
 | |
|       '0',
 | |
|     );
 | |
| 
 | |
|     return '${isNegative ? '-' : ''}$hours:$minutes:$seconds';
 | |
|   }
 | |
| 
 | |
|   String formatShortDuration() {
 | |
|     final isNegative = inMicroseconds < 0;
 | |
|     final positiveDuration = isNegative ? -this : this;
 | |
| 
 | |
|     final hours = positiveDuration.inHours;
 | |
|     final minutes = (positiveDuration.inMinutes % 60).toString().padLeft(
 | |
|       2,
 | |
|       '0',
 | |
|     );
 | |
|     final seconds = (positiveDuration.inSeconds % 60).toString().padLeft(
 | |
|       2,
 | |
|       '0',
 | |
|     );
 | |
|     final milliseconds = (positiveDuration.inMilliseconds % 1000)
 | |
|         .toString()
 | |
|         .padLeft(3, '0');
 | |
| 
 | |
|     String result;
 | |
|     if (hours > 0) {
 | |
|       result =
 | |
|           '${isNegative ? '-' : ''}${hours.toString().padLeft(2, '0')}:$minutes:$seconds.$milliseconds';
 | |
|     } else {
 | |
|       result = '${isNegative ? '-' : ''}$minutes:$seconds.$milliseconds';
 | |
|     }
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   String formatOffset() {
 | |
|     final isNegative = inMicroseconds < 0;
 | |
|     final positiveDuration = isNegative ? -this : this;
 | |
| 
 | |
|     final hours = positiveDuration.inHours.toString().padLeft(2, '0');
 | |
|     final minutes = (positiveDuration.inMinutes % 60).toString().padLeft(
 | |
|       2,
 | |
|       '0',
 | |
|     );
 | |
| 
 | |
|     return '${isNegative ? '-' : '+'}$hours:$minutes';
 | |
|   }
 | |
| 
 | |
|   String formatOffsetLocal() {
 | |
|     // Get the local timezone offset
 | |
|     final localOffset = DateTime.now().timeZoneOffset;
 | |
| 
 | |
|     // Add the local offset to the input duration
 | |
|     final totalOffset = this - localOffset;
 | |
| 
 | |
|     final isNegative = totalOffset.inMicroseconds < 0;
 | |
|     final positiveDuration = isNegative ? -totalOffset : totalOffset;
 | |
| 
 | |
|     final hours = positiveDuration.inHours.toString().padLeft(2, '0');
 | |
|     final minutes = (positiveDuration.inMinutes % 60).toString().padLeft(
 | |
|       2,
 | |
|       '0',
 | |
|     );
 | |
| 
 | |
|     return '${isNegative ? '-' : '+'}$hours:$minutes';
 | |
|   }
 | |
| }
 | |
| 
 | |
| extension DateTimeFormatter on DateTime {
 | |
|   String formatSystem() {
 | |
|     return DateFormat.yMd().add_jm().format(toLocal());
 | |
|   }
 | |
| 
 | |
|   String formatCustom(String pattern) {
 | |
|     return DateFormat(pattern).format(toLocal());
 | |
|   }
 | |
| 
 | |
|   String formatCustomGlobal(String pattern) {
 | |
|     return DateFormat(pattern).format(this);
 | |
|   }
 | |
| 
 | |
|   String formatWithLocale(String locale) {
 | |
|     return DateFormat.yMd().add_jm().format(toLocal()).toString();
 | |
|   }
 | |
| 
 | |
|   String formatRelative(BuildContext context) {
 | |
|     return RelativeTime(context).format(toLocal());
 | |
|   }
 | |
| }
 |