#android #flutter #datepicker
#Android #flutter #datepicker
Вопрос:
Я пытаюсь получить дату из виджета выбора даты по умолчанию в flutter, но когда я выбираю дату, я получаю с ней время. Мне нужна только дата, а не время. и также хотелось бы изменить формат даты, если это возможно.
Это то, что я где-то использовал из примера.
DateTime selectedDate = DateTime.now();
Future<Null> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(2019),
lastDate: DateTime(2020));
if (picked != null amp;amp; picked != selectedDate)
setState(() {
selectedDate = picked;
});
}
Здесь я получаю значение для строки.
Он печатается как «2019-04-16 12:18:06.018950»
child: FlatButton(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onPressed: () {
_selectDate(context);
print("Selected Date = $selectedDate");
},
child: Text(selectedDate == null
? "Select Date"
: selectedDate.toString()),
)),
Я хочу только дату из этого «2019-04-16 12:18:06.018950», а также изменить формат отображения даты, например «дд-мм-гггг»
возможно ли это?
Ответ №1:
Я создаю пользовательский формат даты, вы можете использовать этот код, тогда вы получите результат как: 16-04-2019
TextEditingController _datecontroller = new TextEditingController();
var myFormat = DateFormat('d-MM-yyyy');
Future<void> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: date,
firstDate: DateTime(2015, 8),
lastDate: DateTime(2101));
setState(() {
date = picked ?? date;
});
}
а виджет чернильницы выглядит следующим образом
InkWell(
onTap: () => _selectDate(context),
child: IgnorePointer(
child: TextField(
controller: _datecontroller,
decoration: InputDecoration(
hintText: ('${myFormat.format(date)}'),
),
),
),
),
Комментарии:
1. Спасибо за помощь. Это работает отлично… Кстати, я могу сделать то же самое для времени ri8?
Ответ №2:
Для этого вы можете использовать DateTime
класс. Просто проанализируйте свою строку и получите доступ к отдельным частям как к свойству.
var date = DateTime.parse("2019-04-16 12:18:06.018950");
var formattedDate = "${date.day}-${date.month}-${date.year}";
print (formattedDate);
Это приведет к
16-4-2019
Вот официальная документация.
Комментарии:
1. Это сработало, но все же мне пришлось немного поработать… В любом случае это работает спасибо
2. Если я выберу 1 января, дата. день дает значение ‘1’, как я могу получить ’01’? есть ли какой-нибудь простой способ получить затем, чтобы проверить значение и добавить 0 в начале?
Ответ №3:
Вы также можете использовать DateFormat
класс из intl package.
import 'package:intl/intl.dart';
DateFormat('dd-MM-yyyy').format(DateTime.now());
Подробнее здесь.