编程语言
871
一个 DateTime 对象代表一个时间点。时区可以是 UTC 或者本地时区。
你可以使用多个构造函数创建 DateTime 对象:
// 获取现在的日期和时间 var now = DateTime.now(); // 使用本地时区创建一个新的 DateTime 对象 var y2k = DateTime(2000); // 2000年1月1日 // 指定月和日 y2k = DateTime(2000, 1, 2); // 2000年1月2日 // 指定日期为 UTC 时间 y2k = DateTime.utc(2000); // 2000.01.01, UTC // 使用 Unix 时间戳指定一个日期和时间 y2k = DateTime.fromMillisecondsSinceEpoch(946684800000, isUtc: true); // 解析一个 ISO 8601 格式的日期 y2k = DateTime.parse('2000-01-01T00:00:00Z');
一个日期的 millisecondsSinceEpoch 属性返回距“Unix 纪元”——UTC 时间1970年1月1日 ——的毫秒数:
// 2000.01.01, UTC var y2k = DateTime.utc(2000); assert(y2k.millisecondsSinceEpoch == 946684800000); // 1970.01.01, UTC var unixEpoch = DateTime.utc(1970); assert(unixEpoch.millisecondsSinceEpoch == 0);
使用 Duration 类来计算两个日期的差异,并向前或向后偏移日期:
var y2k = DateTime.utc(2000); // 增加一年 var y2001 = y2k.add(Duration(days: 366)); assert(y2001.year == 2001); // 减去30天 var december2000 = y2001.subtract(Duration(days: 30)); assert(december2000.year == 2000); assert(december2000.month == 12); // 计算两个日期之间的差异 // 返回一个 Duration 对象 var duration = y2001.difference(y2k); assert(duration.inDays == 366); // y2k 是一个闰年
警告:使用 Duration 来偏移一个 DateTime 的天数可能会出问题,因为时间转换(比如夏令时)。如果你一定要偏移天数,可以使用 UTC 日期。