flutter - Conversión de fecha DateTime



Nombre del método Descripción
now() Estructura de nomenclatura, obtener la hora actual
milisegundosSinceEpoch DateTime a la marca de tiempo
de MillisegundosSinceEpoch Marca de tiempo a DateTime
analizar(cadena) cadena a DateTime
esAntes(fecha) comparación de tiempo---antes de
esDespués(fecha) comparación de tiempo--- Después de
isAtSameMomentAs( fecha) comparación de tiempo --- igual
compareTo(fecha) mayor que devuelve 1; igual a devuelve 0; menor que devuelve -1
agregar (Duración) aumento de tiempo
restar (Duración) disminución de tiempo
diferencia (fecha) diferencia de tiempo entre dos horas en horas
timeZoneName código abreviado de zona horaria local
timeZoneOffset return UTC y hora local diferencia en horas
año, mes, día, hora, minuto, segundo, milisegundo , microsegundo devuelve año, mes, día, hora, minuto, segundo, milisegundo, microsegundo
semana devuelve el día de la semana

 //当前时间
    DateTime today = DateTime.now();
    int date1 = today.millisecondsSinceEpoch;
    print('当前时间戳:$date1');
 
    DateTime date2 = DateTime.fromMillisecondsSinceEpoch(date1);
    print('时间戳转日期:$date2');
 
    //拼接成date
    DateTime dentistAppointment = new DateTime(2020, 5, 27, 17, 30, 20);
    print(dentistAppointment);
 
    // 字符串转date
    DateTime date3 = DateTime.parse("2019-07-29 15:32:41");
    print(date3);
 
    // 时间比较
    print(today.isBefore(date3)); // 在之前
    print(today.isAfter(date3)); // 在之后
    print(date3.isAtSameMomentAs(date3)); // 相同
 
    print(date3.compareTo(today)); // 大于返回1;等于返回0;小于返回-1。
    // print(DateTime.now().toString());
    // print(DateTime.now().toIso8601String());
 
    //时间增加
    var fiftyDaysFromNow = today.add(new Duration(days: 5));
    print('today加5天:$fiftyDaysFromNow');
 
    //时间减少
    DateTime fiftyDaysAgo = today.subtract(new Duration(days: 5));
    print('today减5天:$fiftyDaysAgo');
 
    //时间差 两个时间相差 小时数
    print('比较两个时间 差 小时数:${fiftyDaysFromNow.difference(fiftyDaysAgo)}');
 
    print('本地时区简码:${today.timeZoneName}');
 
    print('返回UTC与本地时差 小时数:${today.timeZoneOffset}');
 
    print('获取年月日:${today.year}'); //month、day、hour、minute、second、millisecond、microsecond
 
    print('星期:${today.weekday}'); // 返回星期几

Cadena de conversión de fecha y hora

///来源:
 
/// 输出四位数年份
///
/// Example:
///     formatDate(DateTime(1989), [yyyy]);
///     // => 1989
const String yyyy = 'yyyy';
 
/// 输出两位数年份
///
/// Example:
///     formatDate(DateTime(1989), [yy]);
///     // => 89
const String yy = 'yy';
 
/// 输出两位数月份
///
/// Example:
///     formatDate(DateTime(1989, 11), [mm]);
///     // => 11
///     formatDate(DateTime(1989, 5), [mm]);
///     // => 05
const String mm = 'mm';
 
/// 输出月份(小于10月的前面不补0)
///
/// Example:
///     formatDate(DateTime(1989, 11), [mm]);
///     // => 11
///     formatDate(DateTime(1989, 5), [m]);
///     // => 5
const String m = 'm';
 
/// 输出英文月份
///
/// Example:
///     formatDate(DateTime(1989, 2), [MM]);
///     // => february
const String MM = 'MM';
 
/// 输出英文月份(缩写)
///
/// Example:
///     formatDate(DateTime(1989, 2), [M]);
///     // => feb
const String M = 'M';
 
/// 输出中文月份
///
/// Example:
///     formatDate(DateTime(1989, 2), [MM]);
///     // => 二月
const String MM_ZH = 'MM_ZH';
 
/// 输出两位数天
///
/// Example:
///     formatDate(DateTime(1989, 2, 21), [dd]);
///     // => 21
///     formatDate(DateTime(1989, 2, 5), [dd]);
///     // => 05
const String dd = 'dd';
 
/// 输出天(小于10月的前面不补0)
///
/// Example:
///     formatDate(DateTime(1989, 2, 21), [d]);
///     // => 21
///     formatDate(DateTime(1989, 2, 5), [d]);
///     // => 5
const String d = 'd';
 
/// 输出该日期所在该月的周数
///
/// Example:
///     formatDate(DateTime(1989, 2, 21), [w]);
///     // => 4
const String w = 'w';
 
/// 输出该日期所在年的周数(两位,小于10的周数前面补0)
///
/// Example:
///     formatDate(DateTime(1989, 12, 31), [W]);
///     // => 53
///     formatDate(DateTime(1989, 2, 21), [W]);
///     // => 08
const String WW = 'WW';
 
/// 输出该日期所在年的周数
///
/// Example:
///     formatDate(DateTime(1989, 2, 21), [W]);
///     // => 8
const String W = 'W';
 
/// Outputs week day as long name
///
/// Example:
///     formatDate(DateTime(2018, 1, 14), [DD]);
///     // => sunday
const String EEEE_EN = 'EEEE_EN';
 
/// Outputs week day as long name
///
/// Example:
///     formatDate(DateTime(2018, 1, 14), [D]);
///     // => sun
const String EE_EN = 'EE_EN';
 
/// Outputs week day as long name
///
/// Example:
///     formatDate(DateTime(2018, 1, 14), [DD]);
///     // => 星期日
const String EEEE_ZH = 'EEEE_ZH';
 
/// Outputs week day as long name
///
/// Example:
///     formatDate(DateTime(2018, 1, 14), [D]);
///     // => 周日
const String EE_ZH = 'EE_ZH';
 
/// Outputs hour (0 - 11) as two digits
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15), [hh]);
///     // => 03
const String hh = 'hh';
 
/// Outputs hour (0 - 11) compactly
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15), [h]);
///     // => 3
const String h = 'h';
 
/// Outputs hour (0 to 23) as two digits
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15), [HH]);
///     // => 15
const String HH = 'HH';
 
/// Outputs hour (0 to 23) compactly
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 5), [H]);
///     // => 5
const String H = 'H';
 
/// Outputs minute as two digits
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40), [nn]);
///     // => 40
///     formatDate(DateTime(1989, 02, 1, 15, 4), [nn]);
///     // => 04
const String nn = 'nn';
 
/// Outputs minute compactly
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 4), [n]);
///     // => 4
const String n = 'n';
 
/// Outputs second as two digits
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10), [ss]);
///     // => 10
///     formatDate(DateTime(1989, 02, 1, 15, 40, 5), [ss]);
///     // => 05
const String ss = 'ss';
 
/// Outputs second compactly
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40, 5), [s]);
///     // => 5
const String s = 's';
 
/// Outputs millisecond as three digits
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 999), [SSS]);
///     // => 999
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 99), [SS]);
///     // => 099
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0), [SS]);
///     // => 009
const String SSS = 'SSS';
 
/// Outputs millisecond compactly
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 999), [SSS]);
///     // => 999
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 99), [SS]);
///     // => 99
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 9), [SS]);
///     // => 9
const String SS = 'S';
 
/// Outputs microsecond as three digits
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0, 999), [uuu]);
///     // => 999
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0, 99), [uuu]);
///     // => 099
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0, 9), [uuu]);
///     // => 009
const String uuu = 'uuu';
 
/// Outputs millisecond compactly
///
/// Example:
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0, 999), [u]);
///     // => 999
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0, 99), [u]);
///     // => 99
///     formatDate(DateTime(1989, 02, 1, 15, 40, 10, 0, 9), [u]);
///     // => 9
const String u = 'u';
 
/// 输出所在时间为 AM or PM
///
/// Example:
///     print(formatDate(DateTime(1989, 02, 1, 5), [am]));
///     // => AM
///     print(formatDate(DateTime(1989, 02, 1, 15), [am]));
///     // => PM
const String am = 'am';
 
/// 输出上午/下午
///
/// Example:
///     print(formatDate(DateTime(1989, 02, 1, 5), [am]));
///     // => 上午
///     print(formatDate(DateTime(1989, 02, 1, 15), [am]));
///     // => 下午
const String am_ZH = 'am_ZH';
 
/// Outputs timezone as time offset
///
/// Example:
///
const String z = 'z';
const String Z = 'Z';
 
String formatDateByMs(int microseconds, {List<String>? formats}) {
  return formatDate(DateTime.fromMillisecondsSinceEpoch(microseconds),
      formats: formats);
}
 
String formatDateByStr(String datetimeStr, {List<String>? formats}) {
  return formatDate(DateTime.parse(datetimeStr), formats: formats);
}
 
String formatDate(DateTime date, {List<String>? formats}) {
  final sb = StringBuffer();
  if (null == formats) {
    formats = [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn, ':', ss];
  }
  for (String format in formats) {
    if (format == yyyy) {
      sb.write(_digits(date.year, 4));
    } else if (format == yy) {
      sb.write(_digits(date.year % 100, 2));
    } else if (format == mm) {
      sb.write(_digits(date.month, 2));
    } else if (format == m) {
      sb.write(date.month);
    } else if (format == MM) {
      sb.write(monthLong[date.month - 1]);
    } else if (format == MM_ZH) {
      sb.write(monthZH[date.month - 1]);
    } else if (format == M) {
      sb.write(monthShort[date.month - 1]);
    } else if (format == dd) {
      sb.write(_digits(date.day, 2));
    } else if (format == d) {
      sb.write(date.day);
    } else if (format == w) {
      sb.write((date.day + 7) ~/ 7);
    } else if (format == W) {
      sb.write((dayInYear(date) + 7) ~/ 7);
    } else if (format == WW) {
      sb.write(_digits((dayInYear(date) + 7) ~/ 7, 2));
    } else if (format == EEEE_EN) {
      sb.write(dayLong[date.weekday - 1]);
    } else if (format == EE_EN) {
      sb.write(dayShort[date.weekday - 1]);
    } else if (format == EEEE_ZH) {
      sb.write(dayLongZH[date.weekday - 1]);
    } else if (format == EE_ZH) {
      sb.write(dayShortZH[date.weekday - 1]);
    } else if (format == HH) {
      sb.write(_digits(date.hour, 2));
    } else if (format == H) {
      sb.write(date.hour);
    } else if (format == hh) {
      int hour = date.hour % 12;
      if (hour == 0) hour = 12;
      sb.write(_digits(hour, 2));
    } else if (format == h) {
      int hour = date.hour % 12;
      if (hour == 0) hour = 12;
      sb.write(hour);
    } else if (format == am) {
      sb.write(date.hour < 12 ? 'AM' : 'PM');
    } else if (format == am_ZH) {
      sb.write(date.hour < 12 ? '上午' : '下午');
    } else if (format == nn) {
      sb.write(_digits(date.minute, 2));
    } else if (format == n) {
      sb.write(date.minute);
    } else if (format == ss) {
      sb.write(_digits(date.second, 2));
    } else if (format == s) {
      sb.write(date.second);
    } else if (format == SSS) {
      sb.write(_digits(date.millisecond, 3));
    } else if (format == SS) {
      sb.write(date.second);
    } else if (format == uuu) {
      sb.write(_digits(date.microsecond, 2));
    } else if (format == u) {
      sb.write(date.microsecond);
    } else if (format == z) {
      if (date.timeZoneOffset.inMinutes == 0) {
        sb.write('Z');
      } else {
        if (date.timeZoneOffset.isNegative) {
          sb.write('-');
          sb.write(_digits((-date.timeZoneOffset.inHours) % 24, 2));
          sb.write(_digits((-date.timeZoneOffset.inMinutes) % 60, 2));
        } else {
          sb.write('+');
          sb.write(_digits(date.timeZoneOffset.inHours % 24, 2));
          sb.write(_digits(date.timeZoneOffset.inMinutes % 60, 2));
        }
      }
    } else if (format == Z) {
      sb.write(date.timeZoneName);
    } else {
      sb.write(format);
    }
  }
 
  return sb.toString();
}
 
String _digits(int value, int length) {
  String ret = '$value';
  if (ret.length < length) {
    ret = '0' * (length - ret.length) + ret;
  }
  return ret;
}
 
const List<String> monthShort = const <String>[
  'Jan',
  'Feb',
  'Mar',
  'Apr',
  'May',
  'Jun',
  'Jul',
  'Aug',
  'Sep',
  'Oct',
  'Nov',
  'Dec'
];
 
const List<String> monthLong = const <String>[
  'January',
  'February',
  'March',
  'April',
  'May',
  'June',
  'July',
  'August',
  'September',
  'October',
  'November',
  'December'
];
 
const List<String> monthZH = const <String>[
  '正月',
  '二月',
  '三月',
  '四月',
  '五月',
  '六月',
  '七月',
  '八月',
  '九月',
  '十月',
  '冬月',
  '腊月'
];
 
const List<String> dayShort = const [
  'Mon',
  'Tue',
  'Wed',
  'Thur',
  'Fri',
  'Sat',
  'Sun'
];
 
const List<String> dayLong = const [
  'Monday',
  'Tuesday',
  'Wednesday',
  'Thursday',
  'Friday',
  'Saturday',
  'Sunday'
];
 
const List<String> dayShortZH = const [
  '周一',
  '周二',
  '周三',
  '周四',
  '周五',
  '周六',
  '周日'
];
 
const List<String> dayLongZH = const [
  '星期一',
  '星期二',
  '星期三',
  '星期四',
  '星期五',
  '星期六',
  '星期日'
];
 
int dayInYear(DateTime date) => date.difference(DateTime(date.year)).inDays;
 
bool isToday(String dateStr) {
  DateTime dateTime = DateTime.parse(dateStr);
  String date = "${dateTime.year}-${dateTime.month}-${dateTime.day}";
  String today = formatDate(DateTime.now(), formats: [yyyy, "-", m, "-", d]);
 
  return date == today;
}
 
/// 判断某日期是否为闰年
///
/// Example:
///     isLeapYear("2019")
///     // => false
bool isLeapYear({String dateStr: ''}) {
  int _year = DateTime.now().year;
  if (dateStr.isNotEmpty) {
    _year = DateTime.parse(dateStr).year;
    _year = DateTime.now().year;
  }
  return (_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0;
}
 
/// 友好式时间展示
/// [datetime]
///
String friendlyDateTime(String datetime) {
  String friendly = '';
  String agoOrAfter = '之前';
 
  int _dateTime = DateTime.parse(datetime).millisecondsSinceEpoch;
  int _now = DateTime.now().millisecondsSinceEpoch;
 
  if (_now < _dateTime) {
    agoOrAfter = '之后';
  }
 
  int elapsed = (_now - _dateTime).abs();
 
  final int seconds = elapsed ~/ 1000;
  final int minutes = seconds ~/ 60;
  final int hours = minutes ~/ 60;
  final int days = hours ~/ 24;
  final int weeks = days ~/ 7;
  final int mounts = days ~/ 30;
 
  if (seconds < 60) {
    friendly = agoOrAfter == '之后' ? '马上' : '刚刚';
  } else if (seconds >= 60 && seconds < 60 * 60) {
    friendly = '$minutes分钟$agoOrAfter';
  } else if (seconds >= 60 * 60 && seconds < 60 * 60 * 24) {
    friendly = '$hours小时$agoOrAfter';
  } else if (seconds >= 60 * 60 * 24 && seconds < 60 * 60 * 24 * 2) {
    friendly = agoOrAfter == '之后' ? '明天' : '昨天';
  } else if (seconds >= 60 * 60 * 24 * 2 && seconds < 60 * 60 * 24 * 3) {
    friendly = agoOrAfter == '之后' ? '后天' : '前天';
  } else if (seconds >= 60 * 60 * 24 * 3 && seconds < 60 * 60 * 24 * 7) {
    friendly = '$days天$agoOrAfter';
  } else if (seconds >= 60 * 60 * 24 * 7 && seconds < 60 * 60 * 24 * 30) {
    friendly = '$weeks周$agoOrAfter';
  } else if (seconds >= 60 * 60 * 24 * 30 && seconds < 60 * 60 * 24 * 30 * 6) {
    friendly = '$mounts月$agoOrAfter';
  } else if (seconds >= 60 * 60 * 24 * 30 * 6 &&
      seconds < 60 * 60 * 24 * 30 * 12) {
    friendly = '半年$agoOrAfter';
  } else {
    friendly = formatDateByStr(datetime, formats: [yyyy, '-', mm, '-', dd]);
  }
 
  return friendly;
}
 
/// 根据生日计算年龄
///
/// [birthday] 生日
///
int getAge(String birthday) {
  DateTime date = DateTime.parse(birthday);
 
  DateTime today = DateTime.now();
 
  int age = today.year - date.year;
 
  if (today.month == date.month) {
    if (today.day < date.day) {
      age = age - 1;
    }
  } else if (today.month < date.month) {
    age = age - 1;
  }
 
  return age;
}
 
///获取剩余时间单位:秒
///startTime 开始时间
/// spaceMillSeconds  间隔时间单位:毫秒
int getRemainderTime(
    {required String startTime, int spaceMillSeconds = 30 * 60 * 1000}) {
  //当前时间
  DateTime today = DateTime.now();
  int currentTimeM = today.millisecondsSinceEpoch;
  print('当前时间戳:$currentTimeM');
 
  DateTime startDate = DateTime.parse(startTime);
  int startTimeM = startDate.millisecondsSinceEpoch;
  int remainderTime = startTimeM + spaceMillSeconds - currentTimeM; //剩余毫秒数
  print('当前时间:$today, 开始时间:$startDate  间隔:$remainderTime');
 
  return remainderTime ~/ 1000;
}

Supongo que te gusta

Origin blog.csdn.net/qq_27909209/article/details/130412494
Recomendado
Clasificación