как удалить отметку времени или получить только дату в форме выбора даты в flutter по умолчанию datepicker?

#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()); 
 

Подробнее здесь.