2009-11-09 3 views
0

год у меня есть одно текстовое поле и я должен показать минимальную дату текущего года в этом texboxминимальная дата

, что означает: предположим, что считают, если я выбираю CURRENT_TIME (09/11/2009) затем (01/01/2009) должны быть представлены в текстовом поле

в ожидании ур ответ

ответ

1

Edit: Как нолдорин указывает, самым простым и лаконичным решением является чем-то вроде этого:

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

Мой старый ответ:

Это должно сделать это.

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

Edit: На самом деле это было бы немного чище:

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

.Сегодне, вероятно, будет лучше, чем .Теперь, и что на самом деле делают суммы ненужно - просто создать новую дату? – Murph

+0

Да, я использую сегодня в своем редактировании, вы правы в этом. Нет никакой функциональной разницы в создании нового времени и суммирования даты. Думаю, в этом случае это вопрос личного вкуса. Но я проголосовал за Noldorins, и я согласен, что это хороший способ сделать это. –

+0

Здесь есть ошибка: он получает последний день предыдущего года (например, 1 января 2009 года это день 1, сокращение 1 до 31/12/2008) – Elisha

10

Вы просто хотите, чтобы построить новый DateTime с того же года, а также других параметров, установленных в один (за первый день и месяц).

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

Я бы предложил: новый DateTime (DateTime.Today, 1, 1); как немного лучше (и предполагая, что мы говорим на стороне сервера). – Murph

+0

@Murph: Вы имеете в виду 'DateTime.Today.Year'? Я не вижу в этом преимущества, хотя, конечно, это работает так же хорошо. Я думаю, что мы должны говорить здесь на стороне сервера, причем тегом является 'asp.net'. – Noldorin

+0

Да, означало .year - и вы правы, что в контексте нет большой разницы между .Now и.Сегодня - за исключением того, что если вы думаете о сроках, а не о дате/времени, я думаю, что лучше использовать сегодня, потому что ваши намерения более очевидны. Что касается предположения о его стороне сервера - он предполагает, что тег прав, я разрабатываю сайты asp.net и время от времени у меня проблема с javascript на стороне клиента на моих сайтах asp.net ... давно, нас учили никогда не Предположим, что при программировании - я, вероятно, слишком далеко, но не без оснований (по опыту) – Murph

-1

Предполагая, что вы можете получить объект DateTime из текстового поля (например, DateTime.Parse (...)) вы можете сделать это:

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

Это вызовет исключение, так как 0 - неверный месяц/день. – Noldorin

+0

Является ли 0 допустимым значением для месяца и дня в конструкторе DateTime? Я этого не знал. – Konamiman

+0

Да, вы правы - yyyy-0-0 недействительная дата, исправлена. – Serguei

0

Я должен был решить эту же проблему в мимо. В конце концов, я решил создать класс Extension Methods для класса DateTime, чтобы инкапсулировать и протестировать хотя бы простую функциональность.

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

Теперь я должен сделать, чтобы получить необходимую дату

DateTime selectedDate = DateTime.Today; 
DateTime firstDayOfYear = selectedDate.GetFirstDayOfYear(); 
Смежные вопросы