2009-11-09 3 views
0

je une zone de texte et je dois indiquer la date minimum de l'année en cours dans ce TexBoxdate minimale de l'année

cela signifie: Supposons considérer si je sélectionne current_time (09/11/2009) puis (01/01/2009) doivent figurer dans zone de texte

attente ur réponse

Répondre

1

Edit: comme noldorin souligne, est quelque chose comme la solution la plus simple et la plus laconique ceci:

var firstDayOfYear = new DateTime(DateTime.Today.Year, 1, 1); 

Ma vieille réponse:

Cela devrait le faire.

var now = DateTime.Now 
var firstDayOfYear = now.Subtract(TimeSpan.FromDays(now.DayOfYear - 1)).Date 

Edit: En fait, ce serait un peu plus propre:

var today = DateTime.Today 
var firstDayOfYear = today.Subtract(TimeSpan.FromDays(today.DayOfYear - 1)) 
+0

.Aujourd'hui serait probablement mieux que .Maintenant et qui ne fait sommes est inutile - il suffit de créer une nouvelle date? – Murph

+0

Oui, je l'utilise aujourd'hui dans mon édition, vous avez raison à ce sujet. Il n'y a pas de différence fonctionnelle dans la création d'une nouvelle date et d'une addition. Je suppose que c'est une question de goût personnel dans ce cas. Mais j'ai voté pour les Noldorins, donc je suis d'accord que c'est une bonne façon de le faire aussi. –

+0

Il y a un bug ici: on obtient le dernier jour de l'année précédente (par exemple, le 1/1/2009 c'est le jour 1, en réduisant 1 le prendra jusqu'au 31/12/2008) – Elisha

10

Vous voulez juste construire une nouvelle DateTime avec la même année, et d'autres paramètres mis à un (pour le premier jour et le mois).

var currentDateTime = DateTime.Now; // or whatever else 
var firstDayOfYear = new DateTime(currentDateTime.Year, 1, 1); 
+0

Je suggérerais: new DateTime (DateTime.Today, 1, 1); comme étant un peu mieux (et en supposant que nous parlons côté serveur). – Murph

+0

@Murph: Vous voulez dire 'DateTime.Today.Year'? Je ne vois pas vraiment l'avantage là-dedans, bien que cela fonctionne aussi bien. Je pense que nous devons parler ici côté serveur, avec le tag 'asp.net'. – Noldorin

+0

Oui, signifiait .year - et vous avez raison que dans le contexte il n'y a pas beaucoup de différence entre .Now et.Aujourd'hui - sauf que si vous pensez en termes de dates plutôt que de date/heure, je pense qu'il est préférable d'utiliser Aujourd'hui parce que votre intention est plus évidente. Quant à assumer son côté serveur - il suppose que l'étiquette est juste, je développe des sites asp.net et de temps en temps j'ai un problème javascript côté client dans mes sites asp.net ... il y a longtemps, nous avons appris à ne jamais supposons en programmant - je vais probablement trop loin parfois mais pas sans raison (d'expérience) – Murph

-1

En supposant que vous pouvez obtenir un objet DateTime de la zone de texte (par exemple DateTime.Parse (...)), vous pouvez le faire:

DateTime inputDate = DateTime.Parse(textBox.Text); 
DateTime outputDate = new DateTime(inputDate.Year, 1, 1); 
+0

Cela lèvera une exception, puisque 0 est un mois/jour invalide. – Noldorin

+0

0 est une valeur valide pour le mois et le jour dans le constructeur DateTime? Je ne le savais pas. – Konamiman

+0

Oui, vous avez raison - aaaa-0-0 n'est pas une date valide, corrigé. – Serguei

0

J'ai dû résoudre ce même problème dans le passé. À la fin, j'ai décidé de créer une classe Méthodes d'extension pour la classe DateTime pour encapsuler et tester la fonctionnalité, bien que simple. Maintenant, tout ce que j'aurais

public static class DateTimeExtensions 
{ 
    public static DateTime GetFirstDayOfYear(this DateTime date) 
    { 
     return new DateTime(date.Year, 1, 1); 
    } 
} 

faire pour obtenir la date requise est

DateTime selectedDate = DateTime.Today; 
DateTime firstDayOfYear = selectedDate.GetFirstDayOfYear(); 
Questions connexes