app-starlock/lib/tools/dateTool.dart
sky_min e1c1ee0d38 1.设备时区转化
2.消息列表优化
2025-11-05 17:57:56 +08:00

302 lines
11 KiB
Dart
Executable File

import 'package:date_format/date_format.dart';
import 'package:get/get.dart';
import 'pickers/time_picker/model/pduration.dart';
class DateTool {
/// 获取当前年月日时分秒
String getNowDateWithType(int type) {
String dateStr = '';
// 获取当前时间对象
final DateTime now = DateTime.now();
//获取当前时间的年
final int year = now.year;
//获取当前时间的月
final int month = now.month;
//获取当前时间的日
final int day = now.day;
//获取当前时间的时
final int hour = now.hour;
//获取当前时间的分
final int minute = now.minute;
//获取当前时间的秒
final int millisecond = now.millisecond;
switch (type) {
case 1:
// 年月日时分秒
dateStr =
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}';
break;
case 2:
// 年月日时分
dateStr =
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
case 3:
// 年月日时整点
dateStr =
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:00';
break;
case 4:
// 年月日
dateStr =
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
break;
case 5:
// 时分秒
dateStr =
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}';
break;
case 6:
// 时分
dateStr =
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
case 7:
// 小时整点
dateStr = '${hour.toString().padLeft(2, '0')}:00';
break;
default:
dateStr =
'$year-${month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${millisecond.toString().padLeft(2, '0')}';
break;
}
return dateStr;
}
/// 将时间戳传化为年月日时分秒 (年.月.日 时:分)
// String dateToYMDHNStringWithDot(String timestamp){
// int time = int.parse(timestamp);
// DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
// String appointmentDate = formatDate(nowDate, [yyyy,'.',mm,'.',dd,' ',HH,':',nn]);
// return appointmentDate;
// }
/// 根据传入的PDuration及时间类型获取时间字符串
/// type 1: 年月日时分(2023-01-01 12:00) 2: 年月日(2023-01-01) 3: 时分(12:00)
String getYMDHNDateString(PDuration p, int type) {
final int? year = p.year == 0 ? DateTime.now().year : p.year;
final int? month = p.month == 0 ? DateTime.now().month : p.month;
final int? day = p.day == 0 ? DateTime.now().day : p.day;
final int? hour = p.hour;
final int? minute = p.minute;
String dateStr = '';
switch (type) {
case 1:
// 年月日时分(2023-01-01 12:48)
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
case 2:
// 年月日(2023-01-01)
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
break;
case 3:
// 时分(12:05)
dateStr =
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
case 4:
// 年月日时分(2023-01-01 12:00)整点
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:00';
break;
case 5:
// 时分(12:00)整点
dateStr = '${hour.toString().padLeft(2, '0')}:00';
break;
default:
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
}
return dateStr;
}
/// 根据传入的PDuration及时间类型获取时间字符串
/// type 1: 年月日时分(2023-01-01 12:00) 2: 年月日(2023-01-01) 3: 时分(12:00)
String getYMDHNDateStringWithDateTime(DateTime p, int type) {
final int year = p.year == 0 ? DateTime.now().year : p.year;
final int month = p.month == 0 ? DateTime.now().month : p.month;
final int day = p.day == 0 ? DateTime.now().day : p.day;
final int hour = p.hour;
final int minute = p.minute;
String dateStr = '';
switch (type) {
case 1:
// 年月日时分(2023-01-01 12:48)
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
case 2:
// 年月日(2023-01-01)
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
break;
case 3:
// 时分(12:05)
dateStr =
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
default:
dateStr =
'$year-${month!.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')} ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}';
break;
}
return dateStr;
}
/// 日期转化为时间戳
/// type 0: 12:00 1: 其他
int dateToTimestamp(String dateStr, int type) {
int timestamp = 0;
if (type == 0) {
final List<String> timeParts = dateStr.split(':');
if (timeParts.length < 2) {
return 0;
}
final DateTime now = DateTime.now();
final DateTime dateTime = DateTime(now.year, now.month, now.day,
int.parse(timeParts[0]), int.parse(timeParts[1]));
timestamp = dateTime.millisecondsSinceEpoch;
} else {
final DateTime dateTime = DateTime.parse(dateStr);
timestamp = dateTime.millisecondsSinceEpoch;
}
return timestamp;
}
/// 日期转化为时间戳
/// type 0: 12:00 1: 其他
DateTime? dateToDateTime(String dateStr, int type) {
final int timestamp = dateToTimestamp(dateStr, type);
if (timestamp == 0) {
return null;
} else {
return DateTime.fromMillisecondsSinceEpoch(timestamp);
}
}
/// 将时间戳传化为年月日 (年-月-日 时:分)
String dateToYMDHNString(String? timestamp) {
timestamp ??= '0';
int time = int.parse(timestamp);
if (timestamp.length == 10) {
time = time * 1000;
}
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate =
formatDate(nowDate, <String>[yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]);
return appointmentDate;
}
/// 将时间戳传化为年月日 (年-月-日 时:分)
String dateIntToYMDHNString(int? time) {
time ??= 0;
if (time.toString().length == 10) {
time = time * 1000;
}
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate =
formatDate(nowDate, <String>[yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]);
return appointmentDate;
}
/// 将时间戳传化为年月日 (年-月-日)
String dateToYMDString(String timestamp) {
final int time = int.parse(timestamp);
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate =
formatDate(nowDate, <String>[yyyy, '-', mm, '-', dd]);
return appointmentDate;
}
/// 将时间戳传化为年月日 (时:分)
String dateToHNString(String timestamp) {
final int time = int.parse(timestamp);
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate = formatDate(nowDate, <String>[HH, ':', nn]);
return appointmentDate;
}
/// 获取是否超过现在的时间
bool compareTimeIsOvertime(int endTiem) {
final DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime
final DateTime now = DateTime.now(); // 获取当前时间
if (now.isAfter(dateTime)) {
// 过期
return true;
} else {
return false;
}
}
/// 获取两个距离当前时间相差几天 1705132260000
int compareTimeGetDaysFromNow(int endTiem) {
final DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(endTiem); // 将时间戳转换为 DateTime
final DateTime now = DateTime.now(); // 获取当前时间
final Duration difference = dateTime.difference(now); // 计算两个日期之间的差异
final int days = difference.inDays; // 获取差异的天数
return days;
}
// 根据循环的循环周期转化为对应的整型(Bit0 -- 6 置位分别代表周日 -- 周六)
int accordingTheCycleIntoTheCorrespondingNumber(List weekDay) {
String weekStr = '00000000';
for (var day in weekDay) {
final int index = day % 7; // 将周日的索引转换为 0
weekStr =
'${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
}
// 倒序 weekStr
weekStr = weekStr.split('').reversed.join('');
final int weekRound = int.parse(weekStr, radix: 2);
return weekRound;
}
/// 将时间戳传化为月
String dateToMMString(String? timestamp) {
timestamp ??= '0';
int time = int.parse(timestamp);
if (timestamp.length == 10) {
time = time * 1000;
}
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate =
formatDate(nowDate, <String>[mm]);
return appointmentDate;
}
/// 将时间戳传化为日
String dateToDDString(String? timestamp) {
timestamp ??= '0';
int time = int.parse(timestamp);
if (timestamp.length == 10) {
time = time * 1000;
}
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate =
formatDate(nowDate, <String>[dd]);
return appointmentDate;
}
/// 将时间戳传化为时分
String dateToHnString(String? timestamp) {
timestamp ??= '0';
int time = int.parse(timestamp);
if (timestamp.length == 10) {
time = time * 1000;
}
final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time);
final String appointmentDate =
formatDate(nowDate, <String>[HH, ':', nn]);
return appointmentDate;
}
}