我们在上一章回中介绍了"如何解决组件重名的问题"相关的内容,本章回中将 介绍时间戳.闲话休提,让我们一起Talk Flutter吧。
1. 概念介绍
我们在本章回中介绍的时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。在实际项目中会使用时间戳来签名或者做加密。其实在第二百六十八回中我们就介绍过它的概念和用法,本章回中是在原来内容的基础上做一些补充。
2. 方法与细节
2.1 获取方法
获取时间戳的方法主要通过DataTime
类实现,直接通过类中的成员就可以获取到,我们在这里就不介绍具体的方法了,大家可以参考二百六十八回章回中的内容。
2.2 使用细节
在大部分情况下,我们会获取当前日期的时间戳,不过有时候需要获取指定日期的时间戳,此时需要通过DataTime
的utc
方法指定具体的日期和时间。该方法使用方便,它的参数包含年月日和时分秒。下面是该方法的函数原型:
DateTime.utc(int year,
[int month = 1,
int day = 1,
int hour = 0,
int minute = 0,
int second = 0,
int millisecond = 0,
int microsecond = 0])
: this._internal(year, month, day, hour, minute, second, millisecond,
microsecond, true);
与Java中获取时间戳的方法对比,该方法确实方便一些。我们将在稍后的小节中通过示例代码来比较。
3. 示例代码
///基本用法:获取带时区的时间戳
DateTime.now().millisecondsSinceEpoch;
///获取不带时区的时间戳
DateTime.now().toUtc().millisecondsSinceEpoch;
///java8获取时间戳的代码,与dart对比一下
long timestamp = Instant.now().getEpochSecond();
long timestamp1 = Instant.parse("2024-04-14T10:50:00.000000000Z").getEpochSecond();
LocalDate localDate = LocalDate.of(2024,4,14);
long timestamp2 = localDate.atStartOfDay(ZoneOffset.UTC).toInstant().getEpochSecond();
///获取时间戳,默认带时区,utc方法中的不带时区,而且可以指定到某个时间点的时间戳,
String timeStamp1 = DateTime.utc(2024,4,14,0,0,0,0,0).millisecondsSinceEpoch.toString();
String timeStamp2 = DateTime.utc(2024,4,14,10,50,0,0,0).millisecondsSinceEpoch.toString();
上面的示例代码中演示了Java和dart两种语言获取时间戳的方法。大家可以从代码中看出来dart语言更加方便一些。
此外,在使用Java语言获取时间戳时,我们提供了两种方法,一种通过LocalDate
类实现,它的用法接近于dart,另外一种是直接使用Instant
类,不过该类的参数不好操作,需要在日期后面加T,而且秒后面还需要加固定长度的数字和Z。不然获取不到正确的时间戳。
4. 内容总结
我们在本章回中的内容是前面章回内容的扩展,本章回中主要介绍了获取指定日期的时间戳。并且把获取时间戳的方法与Java语言做了对比,不过在实际项目中获取指定日期的时间戳这个需求不是很多,因为这个值是一个固定值,使用范围小。
最后,我们对本章回的内容做一个全面的总结:
- 在dart中可以通过DateTime类的now方法获取当前的时间戳;
- 在dart中可以通过DateTime类的utc方法获取指定日期的时间戳;
- 在获取时间戳的方法上dart语言比java语言方便一些;
看官们,与"关于时间戳的问题"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!