You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中生成形如2021-09-27T12:22:23.1861335+02:00的时间格式

在Flutter中生成指定格式的时间字符串

你需要生成的是带7位小数秒和时区偏移的ISO 8601格式时间字符串,Dart的DateTime类默认方法无法直接输出这种格式,以下是两种实现方式:

方法一:手动拼接字符串

无需额外依赖,直接通过DateTime的属性拼接出目标格式:

String generateCustomTime() {
  DateTime now = DateTime.now();
  
  // 拼接日期部分(yyyy-MM-dd)
  String dateSegment = '${now.year}-${now.month.toString().padLeft(2, '0')}-${now.day.toString().padLeft(2, '0')}';
  
  // 拼接时间时分秒部分(HH:mm:ss)
  String timeSegment = '${now.hour.toString().padLeft(2, '0')}:${now.minute.toString().padLeft(2, '0')}:${now.second.toString().padLeft(2, '0')}';
  
  // 处理7位小数秒(取微秒补零到7位)
  int microseconds = now.microsecondsSinceEpoch.remainder(1000000);
  String fractionalSegment = microseconds.toString().padLeft(6, '0') + '0';
  
  // 处理时区偏移(±HH:mm格式)
  Duration offset = now.timeZoneOffset;
  String offsetSign = offset.isNegative ? '-' : '+';
  int offsetHours = offset.inHours.abs();
  int offsetMinutes = offset.inMinutes.abs() % 60;
  String offsetSegment = '$offsetSign${offsetHours.toString().padLeft(2, '0')}:${offsetMinutes.toString().padLeft(2, '0')}';
  
  // 拼接所有部分
  return '$dateSegmentT$timeSegment.$fractionalSegment$offsetSegment';
}

// 使用示例
void main() {
  print(generateCustomTime()); // 输出类似 2021-09-27T12:22:23.1861335+02:00
}

方法二:使用intl包辅助格式化

借助intl包简化日期时间的基础格式化,再补充微秒和时区部分:

  1. 先在pubspec.yaml中添加依赖:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.19.0 # 可替换为最新版本
  1. 实现格式化函数:
import 'package:intl/intl.dart';

String formatTargetDateTime(DateTime dateTime) {
  // 用intl格式化基础的日期时间到秒
  String baseFormat = DateFormat('yyyy-MM-ddTHH:mm:ss').format(dateTime);
  
  // 生成7位小数秒
  int micros = dateTime.microsecondsSinceEpoch.remainder(1000000);
  String fractionalPart = micros.toString().padLeft(6, '0') + '0';
  
  // 生成时区偏移字符串
  Duration offset = dateTime.timeZoneOffset;
  String sign = offset.isNegative ? '-' : '+';
  int hours = offset.inHours.abs();
  int minutes = offset.inMinutes.abs() % 60;
  String offsetStr = '$sign${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}';
  
  return '$baseFormat.$fractionalPart$offsetStr';
}

// 使用示例
void main() {
  print(formatTargetDateTime(DateTime.now()));
}

说明

  • 示例中7位小数秒是通过微秒(6位)补一个零实现的,如果你需要更精确的数值(比如模拟纳秒),可以根据需求调整补位逻辑。
  • 如果需要生成指定时区(而非本地时区)的时间,可以先用DateTime.utc()创建UTC时间,再手动添加对应的时区偏移量。

内容的提问来源于stack exchange,提问作者marwan steam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:45:18