Flutter时间计算插件time_since的使用
Flutter时间计算插件time_since的使用
time_since
是一个用于将时间戳转换为人类可读的时间字符串(如“2小时前”,“3个月前”)的 Flutter 包。
特性
- 将时间戳或
DateTime
对象转换为人类可读的时间字符串。 - 可自定义输出格式。
- 支持多种时间单位(年、月、日、小时、分钟、秒)。
- 针对非常近的时间设置“刚刚”阈值。
- 可配置的时间描述精度。
- 自动复数化时间单位。
安装
在你的项目 pubspec.yaml
文件中添加以下依赖:
dependencies:
time_since: ^1.0.0
然后运行:
flutter pub get
使用
基本用法
import 'package:time_since/time_since.dart';
// 使用 DateTime
final dateTime = DateTime(2024, 1, 1);
print(timeSince(dateTime)); // "3个月前"
// 使用 Unix 时间戳(秒)
final timestamp = 1704067200; // 2024年1月1日
print(timeSince(timestamp)); // "3个月前"
自定义输出
你可以通过 TimeFormatOptions
自定义输出格式:
final options = TimeFormatOptions(
addAgo: false, // 不追加 "ago"
maxPrecision: 2, // 显示最多两个单位(例如 "1年,2个月")
justNowThreshold: 60, // 在60秒内显示 "刚刚"
);
final time = DateTime.now().subtract(Duration(hours: 25));
print(timeSince(time, options)); // "1天,1小时"
API 参考
timeSince
String timeSince(dynamic time, [TimeFormatOptions? options])
将时间格式化为人类可读的时间字符串。
参数:
time
: Unix 时间戳(int)或DateTime
对象options
: 可选的TimeFormatOptions
以自定义输出
返回值类似于 “2小时前” 或 “3个月前” 的字符串。
TimeFormatOptions
class TimeFormatOptions {
final bool addAgo; // 是否追加 "ago" 到结果
final int maxPrecision; // 显示的最大单位数量
final int justNowThreshold; // "刚刚" 的秒阈值
const TimeFormatOptions({
this.addAgo = true,
this.maxPrecision = 1,
this.justNowThreshold = 30,
});
}
时间单位
该包支持以下时间单位:
- 年
- 月
- 日
- 小时
- 分钟
- 秒
时间单位会根据数值自动复数化(例如,“1个月”与“2个月”)。
错误处理
如果提供的时间输入无效,包将抛出 ArgumentError
。有效的输入包括:
- Unix 时间戳(int)
DateTime
对象
示例代码
以下是完整的示例代码:
import 'package:time_since/time_since.dart';
void main() {
// 示例1:基本用法(使用 DateTime)
void basicDateTimeExample() {
final now = DateTime.now();
final pastTime = now.subtract(const Duration(hours: 5));
print(timeSince(pastTime)); // "5小时前"
}
// 示例2:使用 Unix 时间戳
void unixTimestampExample() {
final timestampInSeconds = 1698422400; // 2023年10月27日
print(timeSince(timestampInSeconds)); // 结果取决于当前日期
}
// 示例3:自定义格式化选项
void customFormattingExample() {
final now = DateTime.now();
final pastTime = now.subtract(const Duration(days: 45));
final options = TimeFormatOptions(
addAgo: false, // 不追加 "ago"
maxPrecision: 2, // 显示两个单位
);
print(timeSince(pastTime, options)); // "1个月,15天"
}
// 示例4:处理非常近的时间
void recentTimesExample() {
final now = DateTime.now();
final justNow = now.subtract(const Duration(seconds: 10));
final almostNow = now.subtract(const Duration(seconds: 45));
// 默认阈值为30秒
print(timeSince(justNow)); // "刚刚"
print(timeSince(almostNow)); // "45秒前"
// 自定义阈值
final options = TimeFormatOptions(justNowThreshold: 60);
print(timeSince(almostNow, options)); // "刚刚"
}
// 示例5:高精度格式化
void highPrecisionExample() {
final now = DateTime.now();
final pastTime = now.subtract(const Duration(
days: 400,
hours: 5,
minutes: 30,
));
final options = TimeFormatOptions(
maxPrecision: 3,
addAgo: true,
);
print(timeSince(pastTime, options)); // "1年,1个月,5天前"
}
// 示例6:错误处理
void errorHandlingExample() {
try {
// 无效的输入类型
print(timeSince("not a valid time"));
} catch (e) {
print('错误: $e');
// 打印: 错误: 无效的时间输入。期望 Unix 时间戳(int)或 DateTime 对象
}
}
// 运行示例
basicDateTimeExample();
unixTimestampExample();
customFormattingExample();
recentTimesExample();
highPrecisionExample();
errorHandlingExample();
}
更多关于Flutter时间计算插件time_since的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间计算插件time_since的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用time_since
插件来进行时间计算的示例代码。这个插件可以帮助你方便地计算并显示从某个特定时间点到当前时间的时间差(例如,“3天前”,“5分钟前”等)。
首先,确保你已经在pubspec.yaml
文件中添加了time_since
依赖:
dependencies:
flutter:
sdk: flutter
time_since: ^2.0.2 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用TimeSince
小部件。以下是一个完整的示例,展示如何在Flutter应用中显示从某个特定时间点到当前时间的时间差:
import 'package:flutter/material.dart';
import 'package:time_since/time_since.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Time Since Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Time Since Example'),
),
body: Center(
child: TimeSinceExample(),
),
),
);
}
}
class TimeSinceExample extends StatefulWidget {
@override
_TimeSinceExampleState createState() => _TimeSinceExampleState();
}
class _TimeSinceExampleState extends State<TimeSinceExample> {
DateTime pastDateTime = DateTime.now().subtract(Duration(days: 3, hours: 5));
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'It has been',
style: TextStyle(fontSize: 20),
),
TimeSince(
dateTime: pastDateTime,
builder: (context, timeAgo) {
return Text(
timeAgo,
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
);
},
),
],
);
}
}
在这个示例中:
- 我们首先定义了一个过去的日期时间
pastDateTime
,它是当前时间减去3天5小时。 - 然后,在
TimeSinceExample
组件中,我们使用TimeSince
小部件来计算并显示从pastDateTime
到当前时间的时间差。 TimeSince
小部件的builder
参数允许我们自定义显示时间差的文本样式。
运行这个应用,你应该会看到类似“It has been 3 days ago”这样的文本(具体显示取决于当前时间与pastDateTime
之间的差异)。
这个示例展示了如何使用time_since
插件在Flutter应用中方便地显示相对时间。你可以根据需要调整pastDateTime
的值或进一步自定义TimeSince
小部件的显示样式。