首页 > 其他分享 >Dart 非常详细日期的操作方法

Dart 非常详细日期的操作方法

时间:2024-01-05 10:35:47浏览次数:45  
标签:now 22 int 操作方法 DateTime 日期 2020 print Dart


Dart 非常详细日期的操作方法

近期在研究 Dart 源码, 把关于 Date 这一块写个文章进行整理分享。

Dart 中操作日期通过 DateTime 类来实现。

由于 DateTimeDart 内置的,所以不需要导入。

解析

  • DateTime
  • DateTime.parse
  • DateTime.tryParse
  • DateTime.utc

解析一个日期可以通过 DateTime.parse 静态方法

一个典型的例子:

String str = '2020-02-20 22:48:18';
DateTime date = DateTime.parse(str);

print(date);  // 2020-02-20 22:48:18.000

parse 参数接收一个字符串, 能够被解析的有以下格式:

/**
  * "2012-02-27 13:27:00"
  * "2012-02-27 13:27:00.123456789z"
  * "2012-02-27 13:27:00,123456789z"
  * "20120227 13:27:00"
  * "20120227T132700"
  * "20120227"
  * "+20120227"
  * "2012-02-27T14Z"
  * "2012-02-27T14+00:00"
  * "-123450101 00:00:00 Z"
  * "2002-02-27T14:00:00-0500"
  */

parse 方法还有一个对应的 tryParse 的静态方法, 实际上就是 parse 的语法糖

tryParse` 如果接收的参数无法被解析那么不会抛出异常,而是返回 `null

tryParse 的内部实现原理:

try {
  return parse(formattedString);
} on FormatException {
  return null;
}

还可以通过 DateTime 实例进行解析, 可以接收8个参数,第一个是年份必填,剩余的是选填,如下:

/**
 *  DateTime(int year,
 *     [int month = 1,
 *     int day = 1,
 *     int hour = 0,
 *     int minute = 0,
 *     int second = 0,
 *     int millisecond = 0,
 *     int microsecond = 0])
 */
DateTime date = DateTime(2020);

// 2020年2月22日 22小时22分22秒
DateTime date2 = DateTime(2020, 2, 22, 22, 22, 22);

如果想解析成 utc , 可以调用它的静态方法,参数和 DateTime 一致

DateTime date1 = DateTime.utc(2020, 2, 22, 22, 22, 22);

取值

取得当前时间

DateTime n = DateTime.now();
print(n);   // 2020-02-20 23:05:04.332418

取得一个以毫秒时间戳

int t = DateTime.now().millisecondsSinceEpoch;
print(t);  // 1582211214849

取得一个以微秒时间戳

int t = DateTime.now().microsecondsSinceEpoch;
print(t);  // 1582211566844552

取得当前时区

String timeZone = DateTime.now().timeZoneName;
print(timeZone);

取得一周的星期几

int w = DateTime.now().weekday;
print(w);  // 4

取得当前时区的偏移时差 (北京时区是东八区,领先UTC八个小时)

Duration offset = DateTime.now().timeZoneOffset;
print(offset);    // 8:00:00.000000

取得当前年份

int year = DateTime.now().year;
print(year);      // 2020

取得当前月份 (1-12), 这跟JS里有点不同

int month = DateTime.now().month;
print(month);      // 2

取得当前月份的第几天 (1-31)

int day = DateTime.now().day;
print(day);      // 21

取得当前小时 (0-23)

int hour = DateTime.now().hour;
print(hour);      // 8

取得当前分钟 (0-59)

int minute = DateTime.now().minute;
print(minute);      // 18

取得当前秒 (0-59)

int second = DateTime.now().second;
print(second);      // 18

取得当前毫秒 (0-999)

int millisecond = DateTime.now().millisecond;
print(millisecond);      // 249

取得当前微秒 (0-999)

int microsecond = DateTime.now().microsecond;
print(microsecond);      // 249

显示

  • toString
  • toIso8601String
  • toLocal
  • toUtc

toString 要把一个 DateTime 转换成时间可以使用 toString 方法

String str = DateTime.now().toString();
print(str);     // 2020-02-22 01:01:01.182096

toIso8601String 转换成 ISO 8601

String str = DateTime.now().toIso8601String();
print(str);   // 2020-02-22T22:12:30.159729

toLocal

DateTime date = DateTime.now().toLocal();
print(date);   // 2020-02-22 22:27:57.641258

toUtc

DateTime date = DateTime.now().toUtc();
print(date);   // 2020-02-22 03:27:09.564188Z

操作

  • add() 通过增加时间来改变原始的 DateTime
  • subtract() 通过减去时间来改变原始的 DateTime

add() 参数接收的是 Duration 类型, 下面例子由原来的 0小时 新增了 1小时

Duration oneHours = Duration(hours: 1);
String date = DateTime(2020).add(oneHours).toString();
print(date);    // 2020-01-01 01:00:00.000

subtract()add() 反向操作, 用法跟 add 一致,不再阐述。

查询

  • isBefore
  • isAfter
  • isAtSameMomentAs
  • compareTo

isBefore 检查一个 DateTime 是否在另一个 DateTime 之前

DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2019);

print(date1.isBefore(date2));   // false

isAfter 检查一个 DateTime 是否在另一个 DateTime 之后

DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2019);

print(date1.isAfter(date2));   // true

isAtSameMomentAs 如果此事件与other同时发生,则返回true.

DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2019);

print(date1.isAtSameMomentAs(date2));   // false

compareTo 判断2个 DateTime 是否相等,如果相等则返回 0 否则 -1

DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2020);

print(date1.compareTo(date2));   // 0

最后

这里也为想要学习Flutter的朋友们准备了两份学习资料《Flutter Dart语言编程入门到精通》《Flutter实战》,从编程语言到项目实战,一条龙服务!!

《Flutter Dart 语言编程入门到精通》

  • 第一章 Dart语言基础
  • 第二章 Dart 异步编程
  • Dart 非常详细日期的操作方法_面试

  • 第三章 异步之 Stream 详解
  • 第四章 Dart标准输入输出流
  • Dart 非常详细日期的操作方法_flutter_02

  • 第五章 Dart 网络编程
  • 第六章 Flutter 爬虫与服务端
  • Dart 非常详细日期的操作方法_面试_03

  • 第七章 Dart 的服务端开发
  • 第八章 Dart 调用C语言混合编程
  • 第九章 LuaDardo中Dart与Lua的相互调用
  • Dart 非常详细日期的操作方法_android_04

《Flutter实战:第二版》

  • 第一章:起步
  • 第二章:第一个Flutter应用
  • 第三章:基础组件
  • 第四章:布局类组件
  • 第五章:容器类组件

Dart 非常详细日期的操作方法_flutter_05

  • 第六章:可滚动组件
  • 第七章:功能型组件
  • 第八章:事件处理与通知
  • 第九章:动画
  • 第十章:自定义组件
  • Dart 非常详细日期的操作方法_flutter_06

  • 第十一章:文件操作与网络请求
  • 第十二章:Flutter扩展
  • 第十三章:国际化
  • 第十四章:Flutter核心原理
  • 第十五章:一个完整的Flutter应用
  • Dart 非常详细日期的操作方法_开发语言_07

标签:now,22,int,操作方法,DateTime,日期,2020,print,Dart
From: https://blog.51cto.com/u_16163480/9110240

相关文章

  • [简道云] 表单开发-如何检索出差日期并禁止重复日期提交
    应用场景技术员申请出差,处理项目维护业务,但是部分员工,填报时经常记错日期,交叉登记出差日期,引发后续报销费用重复情况。已存在的表单功能登记出差开始日期,结束日期自动列出所选择范围的全部日期自动计算所选择范围的出差天数需要处理的问题新增一个字段,实现检索已录入的出差人员,出差......
  • 轻松转换,一键搞定:JVS低代码平台的日期格式转换功能详解!
    日期和时间在我们的日常生活中起着至关重要的作用,无论是计划日程、管理项目还是执行其他任务,都需要精确的时间信息。在JVS低代码平台上,日期格式转换主要依赖于逻辑引擎中的函数公式。这些函数为我们的用户提供了一种强大且灵活的方式来处理和转换日期时间数据。我们的时间函数旨在......
  • Dart on keyword
    abstractclassAnimal{//propertiesStringname;doublespeed;//constructorAnimal(this.name,this.speed);//abstractmethodvoidrun();}//mixinCanRunisonlyusedbyclassthatextendsAnimal//其实就是把mixinCanRun依附于Animal......
  • 当月日期整行高亮
    问题:数据表中从E列到最后一列中任意一个为当月日期时整行高亮。条件格式中使用函数公式解决:选取A2:N6》开始》条件格式》新建规则》使用和公式确定要设置格式的单元格=SUM(N(EOMONTH(NOW(),0)=EOMONTH(0&$E2:$N2,0))) 当月最后一天和E2:N2中日期最后一天相同时返回True,......
  • Dart final const
    Dart中的const和final在Dart编程语言中,const和final关键字都用于声明常量。虽然它们的目的相同,但在语义和使用上略有不同。constconst关键字用于创建不可变(immutable)的常量,这些常量的值必须在编译时就已知。const可以用于变量、方法和集合(如List)的声明。对于变量,const表示该......
  • java比较年月日期
    Java比较年月日期实现方法引言在实际的开发中,我们经常需要对日期进行比较和计算。Java提供了丰富的日期处理类,可以方便地实现日期的比较。本文将介绍如何使用Java比较年月日期,并提供详细的代码示例和解释。比较年月日期的流程下面是实现比较年月日期的一般流程:步骤描述......
  • java比较两个日期是否间隔一个小时
    比较两个日期是否间隔一个小时在Java中,我们经常需要比较两个日期之间的差异。有时候,我们希望判断两个日期是否间隔一个小时。本文将介绍如何使用Java代码实现这个功能,并提供相应的代码示例。什么是Date类在Java中,Date类是用于表示日期和时间的类。它包含了一系列方法,可以用于操......
  • mysql日期相关函数使用
    最近要经常用到mysql的日期相关函数,但以前用的少,索性总结下1DATE_FORMAT(date,format)published_at字段以datetime类型存储SELECTtitle,DATE_FORMAT(published_at,'%Y-%m-%d')FROMblog_noteWHEREDATE_FORMAT(published_at,'%Y-%m')='2023-09'    2STR_TO_DAT......
  • StringBuilder&正则表达式&日期类总结
    总结StringBuilder:可以改变的字符串底层:使用的是一个byte类型的数组,默认长度16如果超过16,数组会自动扩容扩容的时机:当添加的数据的长度大于此时数组的长度扩容的机制:当前数组长度的2倍+2构造方法:StringBuilder()构造一个没有字符的字符串构建器,初始容量为16个字符。/......
  • Shell脚本中获取机器的日期和时间
    要在Shell脚本中获取机器的日期和时间,可以使用内置的date命令。以下是如何在Shell脚本中使用date命令来获取机器的日期和时间的示例: echo"`date+"%Y%m%d%H:%M:%S"`"在这个示例中,我们使用了date命令和格式化字符串来获取当前日期和时间。%Y代表年份,%m代表月份,%d代表日期,%H代表......