DateTimePicker: choisissez à la fois la date et l'heure

143

Est-il possible d'utiliser DateTimePicker (Winforms) pour choisir à la fois la date et l'heure (dans la liste déroulante)? Comment modifier l'affichage personnalisé de la valeur sélectionnée? De plus, est-il possible de permettre à l'utilisateur de taper la date / heure manuellement?

Grzenio
la source

Réponses:

187

Définissez le format sur Personnalisé, puis spécifiez le format:

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

ou comme vous le souhaitez. Vous pouvez alors saisir directement la date / l'heure. Si vous utilisez MMM, vous devrez utiliser la valeur numérique du mois pour la saisie, à moins que vous n'écriviez vous-même du code pour cela (par exemple, 5 résultats en mai)

Je ne sais pas pour le sélecteur de date et d'heure ensemble. Cela me semble être un contrôle personnalisé.

itsmatt
la source
16
Horloge sur 24 heures: "jj MM aaaa HH mm ss". Je suppose que le développeur doit se soucier de la localisation (format de date / heure différent dans différents pays). Salutations de l'Autriche.
hfrmobile
6
@hfrmobile - vous pouvez également utiliser System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePatternet System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePatternpour obtenir le format de la culture actuelle. Lien MSDN
Wai Ha Lee
1
D'accord avec @WaiHaLee: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " " + time Vous pouvez également contraindre, par exemple, la composante temporelle manuellement: Dim date As String = CultureInfo...ShortDatePattern Dim time As String = CultureInfo...ShortTimePattern dtpThing.Format = DateTimePickerFormat.Custom dtpThingEnd.CustomFormat = date + " HH:mm"
SteveCinq
J'ai utilisé ceci mais j'ai mis le CustomFormat dans les propriétés du sélecteur plutôt que d'utiliser du code
aveugle Skwirl
67

Il est préférable d'utiliser deux DateTimePicker pour le Job. Un sera la valeur par défaut pour la section de date et le second DateTimePicker est pour la partie heure. Formatez le deuxième DateTimePicker comme suit.

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

Les deux devraient ressembler à ceci après les avoir capturés

Deux sélecteurs de date et d'heure

Pour obtenir le DateTime à partir de ces deux contrôles, utilisez le code suivant

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

Pour attribuer le DateTime à ces deux contrôles, utilisez le code suivant

datePortionDateTimePicker.Value  = myDate.Date;  
timePortionDateTimePicker.Value  = myDate.TimeOfDay; 
Vectoria
la source
1
Est-il possible d'augmenter la fréquence des minutes à 30 minutes? Lorsque l'utilisateur clique sur le bouton haut ou bas?
FaizanHussainRabbani
Très bonne réponse! J'ai créé UserControl personnalisé pour le réutiliser plusieurs fois dans mon projet.
mpasko256
Merci pour la suggestion. Il est logique d'avoir deux contrôles différents pour la date et l'heure.
Najeeb
45

Malheureusement, c'est l'un des nombreux abus de langage dans le cadre, ou au mieux une violation de SRP.

Pour utiliser DateTimePicker pour les heures, définissez la propriété Format sur Heure ou Personnalisé (utilisez Personnalisé si vous souhaitez contrôler le format de l'heure à l'aide de la propriété CustomFormat). Définissez ensuite la propriété ShowUpDown sur true.

Bien qu'un utilisateur puisse définir manuellement la date et l'heure ensemble, il ne peut pas utiliser l'interface graphique pour définir les deux.

Nescio
la source
24

Le sélecteur de date et d'heure peut être utilisé pour choisir à la fois la date et l'heure, c'est pourquoi il est appelé «sélecteur de date et d'heure». Vous pouvez définir la propriété « Format » sur « Personnalisé » et définir une combinaison de différents spécificateurs de format pour représenter / sélectionner la date / l'heure dans différents formats dans la propriété « Format personnalisé ». Cependant, si vous souhaitez modifier la date, le calendrier contextuel peut être utilisé alors qu'en cas de sélection de l'heure (dans le même contrôle, vous êtes obligé d'utiliser les touches haut / bas pour modifier les valeurs.

Par exemple, un format personnalisé " jjjjj, MMMM jj, aaaa hh: mm: ss tt " vous donnera un résultat comme celui-ci: " Jeudi 20 août 2009 02:55:23 PM ".

Vous pouvez jouer avec différentes combinaisons de spécificateurs de format en fonction de vos besoins, par exemple MMMM donnera " août " tandis que MM donnera " août "

danois
la source
"DateTime Picker peut être utilisé pour choisir à la fois la date et l'heure, c'est pourquoi il est appelé" Date and Time Picker "." - sauf qu'il ne peut pas, c'est pourquoi la question a été posée.
Derf Skren
En effet, ce contrôle est très frustrant. Je viens de passer un après-midi à déboguer le code jusqu'à ce que je réalise que ce sacré truc renverra une valeur qui représente la date OU l' heure éditée par l'utilisateur , mais pas les deux. Je dois évacuer: comment un contrôle peut-il afficher une date et une heure modifiées par l'utilisateur (mon format personnalisé est yyyy-MM-dd HH:mm), puis renvoyer une valeur qui ne reflète qu'une partie de la date et de l'heure affichées . J'appellerais ça un bug, mais ça existe depuis des décennies ...
EBlake
16

Accédez au Propertiesde votre dateTimePickerdans Visual Studio et définissez-le Formatsur Custom. Sous CustomFormatentrez votre format. Dans mon cas, j'ai utiliséMMMMdd, yyyy | hh:mm

entrez la description de l'image ici
dateTimePickerProperties

Serge Volochenko
la source
Il ne demande pas comment formater / afficher l'heure sur le DateTimePicker. Il se demande comment le faire choisir une heure (d'où le nom DateTimePicker, on supposerait que le contrôle pourrait également être utilisé pour choisir une heure)
BDS1978
Cela devrait être la bonne réponse. A travaillé comme un charme
KingMak
1

Vous pouvez l'obtenir pour afficher l' heure . À partir de là, vous devrez probablement avoir deux contrôles (une date, une heure) pour accomplir ce que vous voulez.

Craig
la source
1

J'ai peur que le contrôle DateTimePicker n'ait pas la capacité de faire ces choses. C'est un contrôle assez basique (et frustrant!). Votre meilleure option peut être de trouver un contrôle tiers qui fait ce que vous voulez.

Pour la possibilité de taper la date et l'heure manuellement, vous pouvez créer un composant personnalisé avec une combinaison TextBox / DateTimePicker pour ce faire, et cela pourrait fonctionner raisonnablement bien, si les contrôles tiers ne sont pas une option.

Jeffrey L Whitledge
la source