问题描述
如何格式化日期并更改为:
仅是dd / mm / yyyy?
输入字段代码:
textFields.add(
GestureDetector(
onTap: () => _selectDate(context),child: AbsorbPointer(
child: TextFormField(
style: TextStyle(
fontSize: 12.0
),controller: _date,keyboardType: TextInputType.datetime,decoration: InputDecoration(
isDense: true,fillColor: Colors.white,hintText: 'Date of Birth',filled: true,enabledBorder: OutlineInputBorder(
borderSide: BorderSide(width: 0.0),),contentPadding: const EdgeInsets.only(left: 14.0,bottom: 10.0,top: 10.0),onSaved: (value) => _dateOfBirth = value,));
_selectDate方法:
DateTime selectedDate = DateTime.now();
TextEditingController _date = new TextEditingController();
Future<Null> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,initialDate: selectedDate,firstDate: DateTime(1901,1),lastDate: DateTime(2100));
if (picked != null && picked != selectedDate)
setState(() {
selectedDate = picked;
_date.value = TextEditingValue(text: picked.toString());
});
}
解决方法
您可以使用intl package的DateFormat
类。您必须在您的intl: ^0.16.1
中将pubspec.yaml
添加为依赖项。可以找到最新版本here。
您可以指定希望日期输出的确切格式。
例如。
import 'package:intl/intl.dart';//Import intl in the file this is being done
Future<Null> _selectDate(BuildContext context) async {
DateFormat formatter = DateFormat('dd/MM/yyyy');//specifies day/month/year format
final DateTime picked = await showDatePicker(
context: context,initialDate: selectedDate,firstDate: DateTime(1901,1),lastDate: DateTime(2100));
if (picked != null && picked != selectedDate)
setState(() {
selectedDate = picked;
_date.value = TextEditingValue(text: formatter.format(picked));//Use formatter to format selected date and assign to text field
});
}
,
DateTime now = DateTime.now(); //current date
DateFormat formatter = DateFormat('yyyy-MM-dd'); // use any format
String formatted = formatter.format(now);
print(formatted); // something like 2013-04-20
如果日期选择器大于
DateFormat formatter = DateFormat('yyyy-MM-dd'); // use any formate
String formatted = formatter.format(picked);