日期 时间 国际化
日期格式化
获取日期
DateTime d=DateTime.now();
print(d); //2023-08-31 12:05:56.010143
print("${d.year}-${d.month}-${d.day} ${d.hour}:${d.minute}:${d.second}");
获取时间戳
DateTime d=DateTime.now();
print(d.millisecondsSinceEpoch);
日期转换成时间戳
日期转换成时间
DateTime d=DateTime(2023,08,1);
print(d.millisecondsSinceEpoch);
日期字符串转换成时间
print(DateTime.parse("2021-08-01"));
print(DateTime.parse("2021-08-01 08:01:30"));
DateTime d=DateTime.parse("2021-08-01 08:01:30");
print(d.millisecondsSinceEpoch);
时间戳转换成日期
DateTime d = DateTime(2023, 08, 1);
int unixtime = d.millisecondsSinceEpoch;
print(DateTime.fromMillisecondsSinceEpoch(unixtime));
时间加减
DateTime time = DateTime.now();
print(time);
print(time.add(const Duration(minutes: 30)));
print(time.add(const Duration(minutes: -30)));
showDatePicker
核心代码
DateTime? time = await showDatePicker(
context: context,
initialDate: _datetime,
firstDate: DateTime(1900),
lastDate: DateTime(2050)
);
if (time != null) {
setState(() {
_datetime = time;
});
}
完整代码
import 'package:flutter/material.dart';
class ShowDateTimePickerPage extends StatefulWidget {
const ShowDateTimePickerPage({super.key});
@override
State<ShowDateTimePickerPage> createState() => _ShowDateTimePickerPageState();
}
class _ShowDateTimePickerPageState extends State<ShowDateTimePickerPage> {
DateTime _datetime = DateTime.now();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Title'),
),
body: Center(
child: InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("${_datetime.year}-${_datetime.month}-${_datetime.day}"),
const Icon(Icons.arrow_drop_down)
],
),
onTap: () async {
DateTime? time = await showDatePicker(
context: context,
initialDate: _datetime,
firstDate: DateTime(1900),lastDate: DateTime(2050)
); // showDatePicker
if (time != null) {
setState(() {
_datetime = time;
});
}
},
), // InkWell
), // Center
); // Scaffold
}
}
showTimePicker
核心代码
TimeOfDay? time =await showTimePicker(context: context, initialTime: _time);
if (time != null) {
setState(() {
_time = time;
});
}
完整代码
import 'package:flutter/material.dart';
class ShowDateTimePickerPage extends StatefulWidget {
const ShowDateTimePickerPage({super.key});
@override
State<ShowDateTimePickerPage> createState() => _ShowDateTimePickerPageState();
}
class _ShowDateTimePickerPageState extends State<ShowDateTimePickerPage> {
DateTime _datetime = DateTime.now();
TimeOfDay _time = TimeOfDay.now();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Title'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("${_datetime.year}-${_datetime.month}-${_datetime.day}"),
const Icon(Icons.arrow_drop_down)
],
),
onTap: () async {
DateTime? datetime = await showDatePicker(
context: context,
initialDate: _datetime,
firstDate: DateTime(1900),
lastDate: DateTime(2050)
); // showDatePicker
if (datetime != null) {
setState(() {
_datetime = datetime;
});
}
},
), // InkWell
SizedBox(height: 20),
InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("${_time.hour}:${_time.minute}"),
const Icon(Icons.arrow_drop_down)
],
), // Row
onTap: () async {
TimeOfDay? time = await showTimePicker(context: context, initialTime: _time);
if (time != null) {
setState(() {
_time = time;
});
}
},
) // InkWell
],
), // Column
), // Center
); // Scaffold
}
}
showDatePicker 显示中文日期 _Flutter 时间控件显示中文
配置flutter_localizations依赖
找到pubspec.yaml配置flutter_localizations
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
导入国际化的包 flutter_localizations
import 'package:flutter_localizations/flutter_localizations.dart';
设置国际化
void main() {
runApp(
new MaterialApp(
title: 'app',
theme: new ThemeData(
primaryColor: Colors.white,
),
home: new MyLoginWidget(),
localizationsDelegates: [
//此处
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
//此处
const Locale('zh', 'CH'),
const Locale('en', 'US'),
],
),
);
}
要显示中文的控件设置
// 这一步也可以不设置
_showDatePicker() async{
var date =await showDatePicker(
context: context,
initialDate: _datetime,
firstDate:DateTime(1900),
lastDate:DateTime(2050),
locale: Locale('zh'),
);
if(date==null) return;
print(date);
setState(() {
_datetime=date;
});
}