DateTime

创建时间

创建DateTime类型的时间

  1. main(List<String> args) {
  2. var nowTime =new DateTime.now();
  3. print(nowTime); // 2022-01-07 13:57:45.691191
  4. var currentTime = new DateTime(2022, 01, 07, 11, 12);
  5. print(currentTime); // 2022-01-07 11:12:00.000
  6. // 创建UTC时间
  7. var utcTime = new DateTime.utc(2022, 01, 07, 11, 12);
  8. print(utcTime); // 2022-01-07 11:12:00.000Z
  9. print(new DateTime.now().toIso8601String()); // 2022-01-07T13:56:04.230147
  10. print(new DateTime.now().toUtc()); // 2022-01-07 05:57:00.388021Z
  11. }

解析时间 字符串转DateTime

解析后返回DateTime类型

main(List<String> args) {
  var d1 = DateTime.parse('2022-01-08 09:30:30Z'); // ISO
  print(d1);  // 2022-01-08 09:30:30.000Z 

  var d2 = DateTime.parse('2022-01-08 09:30:30+0800'); //8601
  print(d2);  // 2022-01-08 09:30:30.000Z

  var d3 = DateTime.parse('2022-01-08'); //8601
  print(d3);  // 2022-01-08 09:30:30.000

  var d4 = DateTime.parse('2022-01-08 09:30:30'); //8601
  print(d4);  // 2022-01-08 00:00:00.000
}

时间戳

main(List<String> args) {
  var now = new DateTime.now();
  print(now.millisecondsSinceEpoch); // 单位毫秒,13位时间戳 1641535256264
  print(now.microsecondsSinceEpoch); // 单位微秒,16位时间戳 1641535256264787
}

时间戳转换成日期

转换后返回DateTime类型

main(List<String> args) {
  var nowTime = new DateTime.now();
  var a1 = nowTime.millisecondsSinceEpoch;        // 13位时间戳
  print(DateTime.fromMillisecondsSinceEpoch(a1)); // 2022-01-07 14:06:47.069

  var a2 = nowTime.microsecondsSinceEpoch;        // 16位时间戳
  print(DateTime.fromMicrosecondsSinceEpoch(a2)); // 2022-01-07 14:06:47.069254
}

时间增减量

main(List<String> args) {
  var d1 = DateTime.now();
  print(d1.add(new Duration(minutes: 5)));  //加五分钟
  print(d1.add(new Duration(minutes: -5))); //减五分钟
}

时间比较

main(List<String> args) {
  var d1 = new DateTime(2022, 01, 07);
  var d2 = new DateTime(2022, 01, 08);
  print(d1.isBefore(d2)); // d1在d2之前  true
  print(d1.isAfter(d2));  // d1在d2之后 false 


  var d3 = DateTime.now();
  var d4 = d3.add(new Duration(milliseconds: 30));
  print(d3.isAtSameMomentAs(d4)); //相等时间比较 false
}

时间差

main(List<String> args) {
  var d1 = new DateTime(2022, 01, 01);
  var d2 = new DateTime(2022, 01, 02);
  var difference = d1.difference(d2);
  print([difference.inDays, difference.inHours]); //d1与d2相差的天数与小时 [-1, -24]
}

时间差

main(List<String> args) {
  var d1 = new DateTime(2022, 01, 01);
  var d2 = new DateTime(2022, 01, 02);
  var difference = d1.difference(d2);
  print([difference.inDays, difference.inHours]); //d1与d2相差的天数与小时 [-1, -24]
}

获取年、月、日、星期、时、分、秒、毫秒、微妙

// year、month、day、weekday、hour、minute、second、millisecond、microsecond

main(List<String> args) {
  var nowTime = DateTime.now();
  print(nowTime);                // 2022-01-07 14:30:50.427729

  print( nowTime.year );         // 2022
  print( nowTime.month );        // 1
  print( nowTime.day );          // 7
  print( nowTime.weekday );      // 5
  print( nowTime.hour );         // 14
  print( nowTime.minute );       // 30
  print( nowTime.second );       // 50
  print( nowTime.millisecond );  // 427
  print( nowTime.microsecond );  // 729
}

获取本地时区简码

main(List<String> args) {
  var d1 = DateTime.now();
  print(d1.timeZoneName);   // CST


  var d2 = DateTime.now().toUtc();
  print(d2.timeZoneName);   // UTC

  var d3 = DateTime.now().toLocal();
  print(d3.timeZoneName);   // CST
}

返回UTC与本地时差(小时数)

main(List<String> args) {
  var d1 = DateTime.now();
  print(d1);                  // 2022-01-07 14:36:06.921993
  print(d1.timeZoneOffset);   // 8:00:00.000000
}

自定义时间格式化

main(List<String> args) {
 //padLeft(int width,String padding):如果字符串长度小于width,在左边填充padding
  var date = new DateTime.now();
  String timestamp = "${date.year.toString()}-${date.month.toString().padLeft(2,'0')}-${date.day.toString().padLeft(2,'0')} ${date.hour.toString().padLeft(2, '0')}:${date.minute.toString().padLeft(2, '0')}";
  print(timestamp); // 2022-01-07 14:01
}

Duration

计算时间跨度

main(List<String> args) {
  Duration timeRemaining = new Duration(days:1, hours:14, minutes:45);
  print(timeRemaining);  // 38:45:00.000000
}