今天介绍一下 DateTime 的一些常用功能,对其进行一个整理。
最近在开发过程中好多时候都会使用到时间方面的方法,心想还是统一处理一下,封装一个管理类,这个类可以满足我们开发过程中常用的时间方法。
今天正好整理了一下,写一篇博客,贴出来分享一下,如果大家有需要可直接复制粘贴即可。
DateTime 是我们常用的一个功能,在和服务器打交道时,将时间戳转成时间展示,将时间转成时间戳传给服务器等方法。
在介绍 DateTime 功能时,我需要介绍一下 date_format 插件。
这个 date_format 是一个时间格式处理工具,是我们在开发过程中时间方面常用的插件,下面是 插件网址介绍
date_format 时间格式插件https://pub.dev/packages/date_format
我们要使用 date_format 创建制定的时间格式,例如:YYYY-MM-DD HH:MM:SS
实现代码如下:
[yyyy, '-', mm, '-', dd, " ", HH, ":", mm, ":", ss]
import 'package:date_format/date_format.dart';
String formatDate(DateTime date, List formats,
{DateLocale locale = const EnglishDateLocale()})
其中 date 就是我们的时间,formats 就是上述面的时间格格式数组。
介绍到这就已经满足我们的功能使用了,如果想看更多方法,大家可以去上面的插件网站看一下详细介绍。
date_format: ^2.0.7
然后我们 pub get 一下即可。
代码实现相对非常简单,这里我就不一一介绍了,我在代码里的注释已经写的很详细了,大家如果有不理解的地方,可以在评论区或者私信找我即可。废话不多说直接上代码。
我们需要创建一个类 DateUtil.dart ,当然名字大家可以随便写,这个无所谓。下面是完整代码。
import 'package:date_format/date_format.dart';
class DateUtil {
/// 获取当前时间
static DateTime currentDateTime = DateTime.now();
/// 获取当前时间戳
/// millisecondsSinceEpoch 秒
/// microsecondsSinceEpoch 毫秒
static int get currentTimeStamp => currentDateTime.millisecondsSinceEpoch;
/// 获取某个时间的时间戳
/// dateTime 时间
static int getTimeStamp(DateTime dateTime) => dateTime.millisecondsSinceEpoch;
/// 将某一个时间戳转时间
/// timeStamp 时间戳
static DateTime getTimeStampToDateTime(int timeStamp) =>
DateTime.fromMicrosecondsSinceEpoch(timeStamp);
/// 判断某个年份是否是闰年
/// year 年
static bool isLeapYear(int year) =>
(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
/// 获取当前某个时间是星期几,默认是当前时间
/// dateTime 时间
static int getWeekByDate({DateTime? dateTime}) =>
(dateTime ?? currentDateTime).weekday;
/// 获取某个时间的下一天,Duration(days: 1) 1 可以变成参数,想传多长时间可自定义
/// dateTime 时间
static DateTime getNextDay({DateTime? dateTime}) =>
(dateTime ?? currentDateTime).add(const Duration(days: 1));
/// 获取某个时间的上一天,Duration(days: 1) 1 可以变成参数,想传多长时间可自定义
/// dateTime 时间
static DateTime getLastDay({DateTime? dateTime}) =>
(dateTime ?? currentDateTime).subtract(const Duration(days: 1));
/// 获取某年某个月份有多少天
/// month 月份
/// year 是哪年,不传默认当前年
static int getDaysAMonth(int month, {int? year}) =>
month == 4 || month == 6 || month == 9 || month == 11
? 30
: month == 2
? (isLeapYear(year ?? currentDateTime.year) ? 29 : 28)
: 31;
/// 获取某个时间字符串展示 例如:2024-01-01 00:01:01
/// dateType 时间格式类型
/// dateTime 某个时间,不传默认 当前时间
static String? getDateFormatTime({DateType? dateType, DateTime? dateTime}) =>
formatDate(
dateTime ?? currentDateTime, (dateType ?? DateType.YYYYMMDD).format);
/// 将某个时间转成字符串
/// dateTime 某个时间,不传默认 当前时间
static String getTimeStr({DateTime? dateTime}) =>
(dateTime ?? currentDateTime).toString();
/// 将某个字符串转成时间
/// timeString 某个时间字符串
static DateTime getDateByStr(String timeString) => DateTime.parse(timeString);
/// 比较两个时间大小
static TimeSort timeComparison(DateTime time1, DateTime time2) =>
time1.isBefore(time2)
? TimeSort.descending
: time1.isAfter(time2)
? TimeSort.ascending
: TimeSort.same;
/// 获取两个时间相差多久
/// ⚠️注意:Duration 是用来表示时间跨度(差值)的类,例如27天,4小时,12分钟和3秒。
/// ⚠️注意:Duration 提供了很多时间单位转换的方法以及时间加减计算的方法,使用起来非常方便。
static Duration getDifferenceTime(DateTime time1, DateTime time2) =>
time1.difference(time2);
}
enum DateType {
YYYY([yyyy]),
YYYYMM([yyyy, '-', mm]),
YYYYMMDD([yyyy, '-', mm, '-', dd]),
YYYYMMDDHH([yyyy, '-', mm, '-', dd, " ", HH]),
YYYYMMDDHHMM([yyyy, '-', mm, '-', dd, " ", HH, ":", mm]),
YYYYMMDDHHMMSS([yyyy, '-', mm, '-', dd, " ", HH, ":", mm, ":", ss]);
final List format;
const DateType(this.format);
}
enum TimeSort {
ascending("升序"),
descending("降序"),
same("相同");
final String title;
const TimeSort(this.title);
}
注意⚠️:代码中的 DateType 是负责设置展示时间展示样式的枚举,TimeSort 是时间比较的 枚举。
以上就是时间管理的常用到的方法,可以基本满足大家的使用,如果不满足,大家可以在我这个基础上扩一些方法就行了。
到此就完成了DateTime一些常用的方法介绍,大家如果有一位可以打在评论区或者私信即可。