一、时间处理的方法

1、获取当前时间

new DateTime.now();

2、设置时间

new DateTime(2020, 11, 11, 12, 37 , 36);

3、解析时间

DateTime.parse('2018-10-10 09:30:36');

4、时间加减

// 加10分钟
now.add(new Duration(minutes: 10)) // 减2小时
now.add(new Duration(hours: -2))

5、比较时间

var d3 = new DateTime(2019, 6, 20);
var d4 = new DateTime(2019, 7, 20);
var d5 = new DateTime(2019, 6, 20); print(d3.isAfter(d4));//是否在d4之后 false
print(d3.isBefore(d4));//是否在d4之前 true
print(d3.isAtSameMomentAs(d5));//是否相同 true

6、计算时间差

var d6 = new DateTime(2019, 6, 19, 16 , 30);
var d7 = new DateTime(2019, 6, 20, 15, 20);
var difference = d7.difference(d6);
print([difference.inDays, difference.inHours,difference.inMinutes]);//d6与d7相差的天数与小时,分钟 [0, 22, 1370]

7、时间戳

print(now.millisecondsSinceEpoch);//单位毫秒,13位时间戳  1561021145560
print(now.microsecondsSinceEpoch);//单位微秒,16位时间戳 1561021145560543

二、一个例子

目标:输出发布时间

规则:小于一分钟,输出‘刚刚’;小于一小时,输出‘xx分钟前’;小于一天,输出‘xx小时前’;小于三天,输出‘xx天前’;大于三天,且在本年度内,输出‘xx月xx日’;大于三天,但不在本年度内,输出‘xx年xx月xx日’。

思路:先保证时间戳正确,然后比较当前时间和发布时间。

代码:

  String get publishTime {
var now = new DateTime.now();
var longTime = this.toString().length < 13 ? this * 1000 : this;
var time = new DateTime.fromMillisecondsSinceEpoch(longTime);
var difference = now.difference(time);
int days = difference.inDays;
int hours = difference.inHours;
int minutes = difference.inMinutes;
String result = '';
if (days > 3) {
bool isNowYear = now.year == time.year;
var pattern = isNowYear ? 'MM-dd' : 'yyyy-MM-dd';
result = new DateFormat(pattern).format(time);
} else if (days > 0) {
result = '$days天前';
} else if (hours > 0) {
result = '$hours小时前';
} else if (minutes > 0) {
result = '$minutes分钟前';
} else {
result = '刚刚';
}
return result;
}

END---------------

dart时间处理的几个方法的更多相关文章

  1. MySQL设置当前时间为默认值的方法

    方法一.是用alert table语句: 复制代码代码如下: use test_db1; create table test_ta1( id mediumint(8) unsigned not nul ...

  2. C++获取当前时间和计算程序运行时间的方法

    C++获取当前时间和计算程序运行时间的方法 获取当前时间: #include <iostream> #include <Windows.h> using namespace s ...

  3. VirtualBox虚拟机内的系统时间无法调整的解决方法

    VirtualBox虚拟机内的系统时间无法调整的解决方法   因试用某软件要求将系统时间设置在特定的日期,利用windows自带的调整日期/时间功能进行设置,发现过几秒钟就又恢复到和主机相同的时间了, ...

  4. struct tm 和 time_t 时间和日期的使用方法(转

    关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元) .概念 在C/C++中,对字符串的操作有很多值得注意的问题,同样,C ...

  5. DEDE自定义表单显示提交时间|添加提交时间,获取ip的方法

    前提是后台自定义表单字段一定要有  “时间”,这里的acca_time <div class="tit">*咨询内容:</div> <div clas ...

  6. AE工程渲染的时间缓慢,两种方法减少对AE工程渲染的时间!

    AE工程渲染的时间缓慢,两种方法减少对AE工程渲染的时间!3秒的片头,渲染时间竟然要花1个多小时,很多新手都产生过这样的疑问?是哪里不对吗?如何才能减少渲染视频的时间?且听我一一道来.主要原因是:工程 ...

  7. SpringBoot中时间格式化的5种方法!

    在我们日常工作中,时间格式化是一件经常遇到的事儿,所以本文我们就来盘点一下 Spring Boot 中时间格式化的几种方法. ​ 时间问题演示 为了方便演示,我写了一个简单 Spring Boot 项 ...

  8. Win2008 IIS7日期时间格式更改最简便方法

    windows2008 这么高级的系统不可能改个系统的日期时间显示格式还要进注册表啊.于是有baidu,google了下终于发现了,原来还有不需要注册表的更简便方法. windows2008默认时间格 ...

  9. 【转】Asp.net中时间格式化的6种方法详细总结

    1. 数据控件绑定时格式化日期方法: 代码如下: <asp:BoundColumn DataField="AddTime" HeaderText="添加时间&quo ...

随机推荐

  1. R语言删除不规范的值(或NA)

    在使用R语言处理表格时(xlsx, csv),有时里面含有缺失值,或者不规范的数值,比如下图有许多的问号"?",为了便于处理数据,这些都应该整行地删掉. 为了删掉那些包含" ...

  2. pytorch训练GAN时的detach()

    我最近在学使用Pytorch写GAN代码,发现有些代码在训练部分细节有略微不同,其中有的人用到了detach()函数截断梯度流,有的人没用detch(),取而代之的是在损失函数在反向传播过程中将bac ...

  3. leetcode148two-sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  4. 25个Android酷炫开源UI框架

    1.Side-Menu.Android 分类侧滑菜单,Yalantis 出品.项目地址:https://github.com/Yalantis/Side-Menu.Android2.Context-M ...

  5. Docker学习笔记:Alpine镜像+Python3安装+http服务器

    编写Dockerfile文件使用最新的Alpine镜像并安装Python3环境,如下: 因为python高于3.4则不会默认安装pip,需要手动安装. 试了很多其他办法都没安装上,唯有下载get-pi ...

  6. martini-能量最小化参数(mdp文件)

    1 ; 2 ; STANDARD MD INPUT OPTIONS FOR MARTINI 2.x 3 ; Updated 02 feb 2013 by DdJ 4 ; 5 ; for use wit ...

  7. 自动化翻译ceph文档

    需求很简单,翻译官网的操作文档 下载ceph代码luminous版本 这个只用来编译doc的,我们只需要最新的这个分支即可,拉最少的代码 git clone -b v12.2.13 --single- ...

  8. ntpd配置时间同步服务器

    修改同步服务器的配置文件/etc/ntp.conf ,删除所有的内容,添加 restrict default nomodify server 127.127.1.0 # local clock fud ...

  9. NUC972当检测到sd卡时,在sd卡驱动中操作gpio开启sd卡的电源,解决sd卡因低电压有时识别不正常的问题

    1.根据硬件原理图,找到对应控制sd卡电源的gpio引脚,并在sd卡驱动文件中定义操作改该引脚的宏 2.在sd卡检测函数中,使用glib增加开sd卡电源的操作,如此当sd卡每次被检测到时,驱动中就会自 ...

  10. 解决NUC972使用800*480屏幕时,tslib触摸屏校准时,坐标不对称问题

    1.ADC_CONF寄存器中的ADCSAMPCNT的值,设置计数器值以延长ADC起始信号周期以获得更多采样精确转换的时间 2.内核驱动配置好触摸屏ADC的驱动后,调整autoconfig.h中的CON ...