Flutter日期时间格式化插件flutter_datetime_format的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter日期时间格式化插件flutter_datetime_format的使用

Flutter Datetime Format 🌟

A simple plugin to format dates and times in Flutter. 📅

Pub Star on Github Flutter Website Awesome Flutter Flutter Samples License: MIT

Introduction 🚀

flutter_datetime_format 包提供了一个易于使用的插件,用于将 DateTime 对象格式化为自定义的日期/时间字符串。该插件支持常见的日期和时间占位符(别名),可以格式化显示完整的月份名称、缩写的星期几等。它非常灵活,允许开发人员使用预定义的别名指定自定义格式模式。

Format Aliases 🔤

您可以使用以下占位符(别名)在自定义格式字符串中:

  • YYYY: 年份(例如:2024) 📆
  • MM: 月份(两位数字,例如:09 表示九月) 🗓️
  • MMMM: 完整的月份名称(例如:September) 🌼
  • DD: 月份中的天数(两位数字,例如:05) 🔢
  • EEE: 缩写的星期几名称(例如:Sun, Mon) 📅
  • HH: 小时(24小时制,例如:14 表示下午2点) ⏰
  • hh: 小时(12小时制,例如:02 表示下午2点) 🕑
  • mm: 分钟(两位数字,例如:05) ⏲️
  • ss: 秒(两位数字,例如:30) ⏱️
  • md: 上午/下午标记(例如:AM, PM) 🌙

Installation 📦

要使用此包,请在 pubspec.yaml 文件中添加 flutter_datetime_format 作为依赖项:

dependencies:
  flutter_datetime_format: ^0.0.1

然后运行:

flutter pub get

Example Usage 💻

以下是如何使用 flutter_datetime_format 来格式化日期和时间的示例:

示例代码

import 'package:flutter/material.dart';
import 'package:flutter_datetime_format/flutter_datetime_format.dart' as fd;
import 'package:intl/date_symbol_data_local.dart';

void main() async {
  // Initialize the locale data
  WidgetsFlutterBinding.ensureInitialized();
  await initializeDateFormatting('fr', null); // Example: Initialize for French
  await initializeDateFormatting('es', null); // Example: Initialize for Spanish

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    DateTime date = DateTime(2024, 9, 22, 14, 5, 30); // Example date
    DateTime pastDate =
        DateTime.now().subtract(const Duration(hours: 5)); // 5 hours ago
    DateTime futureDate =
        DateTime.now().add(const Duration(days: 2)); // 2 days from now
    DateTime? nullDate; // Example null date

    return MaterialApp(
      home: Scaffold(
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // Example 1: Default formatting
            Center(
              child: Text(
                fd.FLDateTime.formatTime(date, 'DD/MM/YYYY - (HH:mm)'),
                style: const TextStyle(
                  fontSize: 22,
                  color: Colors.red,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            // Example 2: Localization Support
            Center(
              child: Text(
                fd.FLDateTime.formatTime(date, 'EEE, MMMM DD, YYYY',
                    locale: 'en'),
                style: const TextStyle(
                  fontSize: 22,
                  color: Colors.blue,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            Center(
              child: Text(
                fd.FLDateTime.formatTime(date, 'EEE, MMMM DD, YYYY',
                    locale: 'es'),
                style: const TextStyle(
                  fontSize: 22,
                  color: Colors.green,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            // Example 3: Relative Time Formatting
            Center(
              child: Text(
                fd.FLDateTime.formatRelative(pastDate),
                style: const TextStyle(
                  fontSize: 22,
                  color: Colors.purple,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            Center(
              child: Text(
                fd.FLDateTime.formatRelative(futureDate),
                style: const TextStyle(
                  fontSize: 22,
                  color: Colors.orange,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            // Example 4: Null Date with Fallback
            Center(
              child: Text(
                fd.FLDateTime.formatTime(nullDate, 'DD/MM/YYYY'),
                style: const TextStyle(
                  fontSize: 22,
                  color: Colors.red,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Key Updates

  • formatTime(date,format): 添加了 formatTime 方法,用于本地化日期格式化和自定义格式支持。
  • formatRelative(date,ref): 添加了 formatRelative 方法,用于格式化相对时间,如 “2小时前” 或 “3天后”。
  • deprecate: formatCustom → 使用 formatTime 替代。
  • deprecate: formatHour12 → 使用 formatTime 替代。
  • deprecate: formatName → 使用 formatTime 替代。
  • fix: 在 formatTime 中处理 nullDateTime 值,并提供回退字符串。

Resources 📌

Feel free to contribute, report issues, or request new features on GitHub.


希望这个回答能帮助你更好地理解和使用 flutter_datetime_format 插件!如果有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter日期时间格式化插件flutter_datetime_format的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日期时间格式化插件flutter_datetime_format的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用flutter_datetime_format插件在Flutter中格式化日期和时间的示例代码。这个插件提供了一种简单的方法来格式化DateTime对象。

首先,你需要在pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_datetime_format: ^2.0.0  # 请确保使用最新版本

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Dart文件中使用flutter_datetime_format插件。以下是一个完整的示例,展示如何格式化当前日期和时间:

import 'package:flutter/material.dart';
import 'package:flutter_datetime_format/flutter_datetime_format.dart';
import 'package:intl/intl.dart'; // 这个包通常与日期时间格式化一起使用,但flutter_datetime_format本身不直接依赖它

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter DateTime Format Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Formatted Date:',
                style: TextStyle(fontSize: 20),
              ),
              FormattedDateWidget(
                date: DateTime.now(),
                format: DateFormat('yyyy-MM-dd'), // 格式化模式
              ),
              SizedBox(height: 20),
              Text(
                'Formatted DateTime:',
                style: TextStyle(fontSize: 20),
              ),
              FormattedDateTimeWidget(
                dateTime: DateTime.now(),
                format: DateFormat('yyyy-MM-dd HH:mm:ss'), // 格式化模式
              ),
            ],
          ),
        ),
      ),
    );
  }
}

// 自定义小部件来显示格式化后的日期
class FormattedDateWidget extends StatelessWidget {
  final DateTime date;
  final DateFormat format;

  FormattedDateWidget({required this.date, required this.format});

  @override
  Widget build(BuildContext context) {
    return Text(
      format.format(date),
      style: TextStyle(fontSize: 18),
    );
  }
}

// 自定义小部件来显示格式化后的日期和时间
class FormattedDateTimeWidget extends StatelessWidget {
  final DateTime dateTime;
  final DateFormat format;

  FormattedDateTimeWidget({required this.dateTime, required this.format});

  @override
  Widget build(BuildContext context) {
    return Text(
      format.format(dateTime),
      style: TextStyle(fontSize: 18),
    );
  }
}

在这个示例中,我们定义了两个自定义小部件FormattedDateWidgetFormattedDateTimeWidget,它们分别用于显示格式化后的日期和日期时间。我们使用了intl包中的DateFormat类来定义格式化模式。

请注意,虽然flutter_datetime_format插件本身提供了额外的功能,但在上述示例中,我们主要利用了intl包中的DateFormat类来进行格式化,因为flutter_datetime_format通常是对intl包的一个封装或扩展。如果你需要flutter_datetime_format插件提供的特定功能,请参考其官方文档,因为具体用法可能会有所不同。

回到顶部