Flutter日期时间处理插件date_time_plus的使用

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

Flutter日期时间处理插件 date_time_plus 的使用

date_time_plus 是一个用于在Flutter应用中处理日期和时间的插件。它提供了多种功能,包括日期选择器、时间选择器、日期时间转换等功能。

安装

首先,在你的 pubspec.yaml 文件中添加 date_time_plus 作为依赖:

dependencies:
  ...
  date_time_plus: ^latest_version

然后运行以下命令来安装依赖:

flutter pub get

使用示例

下面是一个完整的示例,展示了如何使用 date_time_plus 插件中的各种功能。

示例代码

import 'dart:developer';
import 'package:date_time_plus/date_times.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
        debugShowCheckedModeBanner: false, home: DateTimePicker());
  }
}

class DateTimePicker extends StatefulWidget {
  const DateTimePicker({Key? key}) : super(key: key);

  @override
  State<DateTimePicker> createState() => _DateTimePickerState();
}

class _DateTimePickerState extends State<DateTimePicker> {
  String _selectedDate = DateTimes.getCurrentDateTime();
  String _selectedFromDate = DateTimes.getCurrentDateTime();
  String _selectedToDate = DateTimes.getCurrentDateTime();
  String _selectedTime = DateTimes.getCurrentTime();
  final TextEditingController _conDate = TextEditingController();
  final TextEditingController _conDateRange = TextEditingController();
  final TextEditingController _conTime = TextEditingController();

  @override
  void initState() {
    super.initState();

    // 日志输出示例
    log(DateTimes.calcValueByDateTime(
            fromDateTime: "1997-04-26", toDateTime: "1997-04-30")
        .days
        .toString());
    log(DateTimes.startAndEndDateOfMonth(date: "1997-04-26").startDate);
    log(DateTimes.timer(seconds: 1200).inHours.toString());
    log(DateTimes.timeToValue(time: "12:12:12").inMinutes.toString());
    log(DateTimes.getCurrentDateTime());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("date_time_plus"),
      ),
      body: SafeArea(
          child: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.all(20),
          child: Column(
            children: [
              TextField(
                controller: _conDate
                  ..text = DateTimes.formatDateTime(
                      dateTime: _selectedDate,
                      inFormat: Format.fyyyyMMdd,
                      outFormat: Format.fddMMyyyy),
                readOnly: true,
                decoration: const InputDecoration(
                    labelText: "Date", hintText: "Select Date"),
                onTap: () {
                  DateTimes.datePicker(
                      context: context,
                      date: _selectedDate,
                      onSelected: (date) {
                        log(date);
                        setState(() {
                          _selectedDate = date;
                        });
                      });
                },
              ),
              const SizedBox(
                height: 20,
              ),
              TextField(
                controller: _conDateRange
                  ..text =
                      "${DateTimes.formatDateTime(dateTime: _selectedFromDate, inFormat: Format.fyyyyMMdd, outFormat: Format.fddMMyyyy)} / ${DateTimes.formatDateTime(dateTime: _selectedToDate, inFormat: Format.fyyyyMMdd, outFormat: Format.fddMMyyyy)}",
                readOnly: true,
                decoration: const InputDecoration(
                    labelText: "Date Range", hintText: "Select Date Range"),
                onTap: () {
                  DateTimes.dateRangePicker(
                      context: context,
                      fromDate: _selectedFromDate,
                      toDate: _selectedToDate,
                      onSelected: (fromDate, toDate) {
                        log("$fromDate / $toDate");
                        setState(() {
                          _selectedFromDate = fromDate;
                          _selectedToDate = toDate;
                        });
                      });
                },
              ),
              const SizedBox(
                height: 20,
              ),
              TextField(
                controller: _conTime
                  ..text = DateTimes.formatDateTime(
                      dateTime: _selectedTime,
                      inFormat: Format.fHHmmss,
                      outFormat: Format.fhhmma),
                readOnly: true,
                decoration: const InputDecoration(
                    labelText: "Time", hintText: "Select Time"),
                onTap: () {
                  DateTimes.timePicker(
                      context: context,
                      time: _selectedTime,
                      hasSeconds: false,
                      onSelected: (time) {
                        log(time);
                        setState(() {
                          _selectedTime = time;
                        });
                      });
                },
              )
            ],
          ),
        ),
      )),
    );
  }
}

功能说明

获取当前日期和时间

DateTimes.getCurrentDateTime(); // 获取当前日期和时间
DateTimes.getCurrentDate();     // 获取当前日期
DateTimes.getCurrentTime();     // 获取当前时间

日期选择器

DateTimes.datePicker(
  context: context,
  date: "1997-04-26",
  onSelected: (date) {
    log(date);
  }
);

日期范围选择器

DateTimes.dateRangePicker(
  context: context,
  fromDate: "1997-04-26",
  toDate: "1997-04-30",
  onSelected: (fromDate, toDate) {
    log("$fromDate / $toDate");
  }
);

时间选择器

DateTimes.timePicker(
  context: context,
  time: "12:12:00",
  onSelected: (time) {
    log(time);
  }
);

计算两个日期之间的差异

DateTimes.calcValueByDateTime(
  fromDateTime: "1997-04-26 12:12:00",
  toDateTime: "1997-04-30 12:12:00"
).inDays;

获取月份的开始和结束日期

DateTimes.startAndEndDateOfMonth(date: "1997-04-26").startDate;
DateTimes.startAndEndDateOfMonth(date: "1997-04-26").endDate;

将总秒数转换为天、小时、分钟、秒

DateTimes.timer(seconds: 1200).inDays;
DateTimes.timer(seconds: 1200).inHours;
DateTimes.timer(seconds: 1200).inMinutes;
DateTimes.timer(seconds: 1200).inSeconds;

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

1 回复

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


当然,date_time_plus 是一个强大的 Flutter 插件,用于增强 Dart 的日期和时间处理功能。它提供了一系列实用的方法来操作、格式化日期和时间。以下是一些使用 date_time_plus 插件的示例代码。

首先,确保你已经在 pubspec.yaml 文件中添加了 date_time_plus 依赖:

dependencies:
  flutter:
    sdk: flutter
  date_time_plus: ^2.0.0  # 请检查最新版本号

然后运行 flutter pub get 来获取依赖。

示例代码

1. 导入插件

在你的 Dart 文件中导入 date_time_plus

import 'package:date_time_plus/date_time_plus.dart';

2. 获取当前日期和时间

void main() {
  // 获取当前日期和时间
  DateTime now = DateTime.now();
  print("当前日期和时间: $now");
}

3. 日期加减

使用 addsubtract 方法对日期进行加减操作:

void main() {
  DateTime now = DateTime.now();
  
  // 加7天
  DateTime futureDate = now.add(Duration(days: 7));
  print("7天后的日期: $futureDate");
  
  // 减3天
  DateTime pastDate = now.subtract(Duration(days: 3));
  print("3天前的日期: $pastDate");
}

4. 获取日期的特定部分

使用 date_time_plus 提供的扩展方法获取日期的特定部分,例如年份、月份、星期等:

void main() {
  DateTime now = DateTime.now();
  
  // 获取年份
  int year = now.year;
  print("年份: $year");
  
  // 获取月份(1-12)
  int month = now.month;
  print("月份: $month");
  
  // 获取星期几(1-7,1表示星期一)
  int weekday = now.weekday;
  print("星期几: $weekday");
  
  // 获取小时
  int hour = now.hour;
  print("小时: $hour");
}

5. 格式化日期和时间

使用 toLocaltoIso8601String 方法格式化日期和时间:

void main() {
  DateTime now = DateTime.now();
  
  // 本地时间字符串
  String localString = now.toLocal();
  print("本地时间字符串: $localString");
  
  // ISO 8601 格式字符串
  String isoString = now.toIso8601String();
  print("ISO 8601 格式字符串: $isoString");
  
  // 自定义格式字符串(需要配合 `intl` 包使用)
  // 首先在 pubspec.yaml 中添加 intl 依赖:
  // dependencies:
  //   intl: ^0.17.0  # 请检查最新版本号
  
  // 然后在代码中使用:
  // import 'package:intl/intl.dart';
  // String formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(now);
  // print("自定义格式字符串: $formattedDate");
}

注意:自定义格式化日期和时间通常使用 intl 包,这里为了保持专注于 date_time_plus,所以没有详细展开 intl 的使用,但在实际开发中,intl 包非常有用。

6. 判断是否为闰年

虽然 date_time_plus 没有直接提供判断闰年的方法,但你可以使用 Dart 内置的 DateTime 类结合逻辑判断来实现:

bool isLeapYear(int year) {
  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

void main() {
  int year = DateTime.now().year;
  print("$year 年是闰年吗? ${isLeapYear(year)}");
}

这些示例展示了 date_time_plus 插件的一些基本用法。如果你需要更高级的功能,建议查阅 date_time_plus 的官方文档 以获取更多信息。

回到顶部