requireDate function

DateTime requireDate(
  1. dynamic raw, {
  2. DateTime fallback()?,
})

强制解析出一个日期

如果解析出错, 就根据fallback逻辑构造一个代替时间

Implementation

DateTime requireDate(
  dynamic raw, {
  DateTime Function()? fallback,
}) {
  final now = DateTime.now();
  if (raw == null) return now;

  DateTime date;

  try {
    int? timestamp;
    if (raw is int) {
      timestamp = raw;
    } else if (raw is String) {
      timestamp = int.tryParse(raw);
    }

    if (timestamp != null) {
      // 先尝试直接按毫秒解析时间戳
      date = DateTime.fromMillisecondsSinceEpoch(timestamp);
      // 如果发现年是在1970年, 则有极大概率时间戳单位是秒, 这里乘以1000再次解析
      if (date.year == 1970) {
        date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
      }
      return date;
    } else {
      date = DateTime.tryParse(raw) ?? now;
      return date;
    }
  } catch (e) {
    L.w('解析日期出错($raw), 使用当前时间代替, 错误信息: $e');
    return fallback?.call() ?? now;
  }
}