DateTimePicker: escolha data e hora

143

É possível usar o DateTimePicker (Winforms) para escolher a data e a hora (no menu suspenso)? Como você altera a exibição personalizada do valor escolhido? Além disso, é possível permitir que o usuário digite a data / hora manualmente?

Grzenio
fonte

Respostas:

187

Defina o formato como personalizado e especifique o formato:

dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "MM/dd/yyyy hh:mm:ss";  

ou no entanto, você deseja definir isso. Você pode digitar diretamente a data / hora. Se você usa o MMM, precisará usar o valor numérico do mês para entrada, a menos que você mesmo escreva algum código para isso (por exemplo, 5 resultados em maio)

Não saiba sobre o selecionador para data e hora juntos. Parece um controle personalizado para mim.

itsmatt
fonte
16
Relógio de 24 horas: "dd MM aaaa HH mm ss". Eu acho que o desenvolvedor precisa se preocupar com a localização (formato diferente de data / hora em diferentes países). Saudações da Áustria.
Hfrmobile
6
@ hfrmobile - você também pode usar System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatterne System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternobter o formato para a cultura atual. Link MSDN
Wai Ha Lee
1
Concorde com @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time Você também pode restringir, digamos, o componente de tempo manualmente: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq
Eu usei isso, mas eu colocar o CustomFormat nas propriedades picker em vez de usar código
cego Skwirl
67

É melhor usar dois DateTimePickers para o Job One será o padrão para a seção date e o segundo DateTimePicker será para a parte da hora. Formate o segundo DateTimePicker da seguinte maneira.

      timePortionDateTimePicker.Format = DateTimePickerFormat.Time;
      timePortionDateTimePicker.ShowUpDown = true;

Os dois devem ficar assim depois de capturá-los

Dois selecionadores de data e hora

Para obter o DateTime de ambos os controles, use o seguinte código

DateTime myDate = datePortionDateTimePicker.Value.Date + 
                    timePortionDateTimePicker.Value.TimeOfDay; 

Para atribuir o DateTime a esses dois controles, use o seguinte código

datePortionDateTimePicker.Value  = myDate.Date;  
timePortionDateTimePicker.Value  = myDate.TimeOfDay; 
Vectoria
fonte
1
Existe a possibilidade de aumentar a frequência de minutos para 30 minutos? Quando o usuário clica no botão para cima ou para baixo?
FaizanHussainRabbani 1/16
Ótima resposta! Fiz UserControl personalizado para reutilizá-lo várias vezes no meu projeto.
precisa saber é o seguinte
Obrigado pela sugestão. Faz sentido ter dois controles diferentes para data e hora.
Najeeb
45

Infelizmente, esse é um dos muitos nomes inadequados na estrutura ou, na melhor das hipóteses, uma violação do SRP.

Para usar o DateTimePicker por horários, defina a propriedade Format como Hora ou Personalizada (Use Personalizado se desejar controlar o formato da hora usando a propriedade CustomFormat). Em seguida, defina a propriedade ShowUpDown como true.

Embora um usuário possa definir a data e a hora juntos manualmente, ele não pode usar a GUI para definir os dois.

Nescio
fonte
24

O DateTime Picker pode ser usado para escolher a data e a hora, por isso é chamado de 'Date and Time Picker'. Você pode definir a propriedade " Formato " como " Personalizado " e definir a combinação de diferentes especificadores de formato para representar / escolher a data / hora em diferentes formatos na propriedade " Formato personalizado ". No entanto, se você quiser alterar a Data, o calendário pop-up poderá ser usado, enquanto que no caso da seleção da Hora (no mesmo controle, você deverá usar as teclas para cima / para baixo para alterar os valores.

Por exemplo, um formato personalizado " ddddd, MMMM dd, aaaa hh: mm: ss tt " fornecerá um resultado como este: " Quinta-feira, 20 de agosto de 2009 02:55:23 ".

Você pode brincar com diferentes combinações de especificadores de formato para atender às suas necessidades, por exemplo, o MMMM fornecerá " agosto ", enquanto o MM fornecerá " agosto "

dinamarquês
fonte
"O DateTime Picker pode ser usado para escolher a data e a hora, por isso é chamado de 'Date and Time Picker'." - exceto que não pode, e é por isso que a pergunta foi feita.
Derf Skren
De fato, esse controle é muito frustrante. Acabei de passar um código de depuração à tarde até perceber que o problema retornará um valor que representa a data OU hora editada pelo usuário , mas não os dois. Eu tenho que desabafar: como um controle pode mostrar uma data e hora válidas editadas pelo usuário (meu formato personalizado é yyyy-MM-dd HH:mm) e depois retornar um valor que reflete apenas parte da data e hora exibidas . Eu diria que é um bug, mas tem sido há décadas ...
EBlake
16

Vá para o Propertiesseu dateTimePickerno Visual Studio e defina Formatcomo Custom. Em CustomFormatdigite seu formato. No meu caso eu useiMMMMdd, yyyy | hh:mm

insira a descrição da imagem aqui
dateTimePickerProperties

Serge Voloshenko
fonte
Ele não está perguntando como formatar / exibir a hora no DateTimePicker. Ele está pedindo como fazê-lo pegar um tempo (daí o nome DateTimePicker, é de se supor que o controle também pode ser usado para escolher um momento)
nivs1978
Essa deve ser a resposta certa. Funcionou como um encanto
KingMak 13/03
1

Você pode exibir o tempo . A partir disso, você provavelmente terá que ter dois controles (uma data, uma vez) para realizar o que deseja.

Craig
fonte
1

Receio que o controle DateTimePicker não tenha a capacidade de fazer essas coisas. É um controle bastante básico (e frustrante!). Sua melhor opção pode ser encontrar um controle de terceiros que faça o que você deseja.

Para a opção de digitar a data e a hora manualmente, você pode criar um componente personalizado com uma combinação TextBox / DateTimePicker para fazer isso, e pode funcionar razoavelmente bem, se controles de terceiros não forem uma opção.

Jeffrey L Whitledge
fonte