saeed rajabi Ответов: 2

Как сохранить только дату в переменной datetime?


я получил дату из datepicker и сохранил ее в одной строковой переменной(потому что она исходит из html textbox)
string to = Request.QueryString["to"];

после этого я перевожу персидские цифры даты на английский
string d = Regex.Replace(from, "[۰-۹]", x => ((char)(x.Value[0] - '۰' + '0')).ToString());

и я преобразую тип даты(строка в дату).
DateTime dt = DateTime.ParseExact(d, "yyyy/dd/MM", CultureInfo.InvariantCulture);


Что я уже пробовал:

но я даю время с датой(моя дата не имеет никакого времени).
я даю это :
۱۳۹۵/۰۴/۰۱
я понимаю это :
1/4/1395 12: 00: 00 утра
мне не нужно время.
я хочу использовать переменную datetime без какого-либо времени.
есть идеи?

an0ther1

Переменная DateTime всегда включает в себя компонент времени - если компонент времени не установлен, то предполагается, что он равен 12.00 утра
Что ты пытаешься сделать? Если вы хотите просмотреть часть даты вашей переменной DateTime, вам нужно преобразовать ее в строку - на самом деле вы не смотрите на значения DateTime, а только на их строковые представления.
значение datetime.ToString("dd/MM/yyyy"); выдаст вам значение в виде строки, содержащей только день, месяц и год, разделенные "/"

2 Ответов

Рейтинг:
6

dcmuggins

Я считаю, что это должно сработать:

DateTime date = yourDate.Date;

Вы можете отобразить его следующим образом:
Console.Writeline(date.ToString("d"));

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


Рейтинг:
15

OriginalGriff

Вы не можете хранить "вневременную" дату в DateTime: она не хранится так внутренне. Когда вы создаете экземпляр DateTime, он не хранит год, месяц и день отдельно - вместо этого он преобразует все это в количество тиков с определенного момента в прошлом и сохраняет их в значении UInt64.
В результате каждая Дата-Время всегда имеет "компонент даты и времени".
Что вам нужно сделать, так это убрать компонент времени, когда вы форматируете данные для отображения.
Видеть здесь: Форматирование даты-времени для описания строки формата отображения[^]

Никогда не пытайтесь сравнивать даты на основе строк, Если вы можете этого избежать: это может вызвать так много осложнений!
При выполнении" вневременных " сравнений вы можете удалить компонент времени с обеих сторон, используя свойство Date:

if (startDate.Date <= endDate.Date)
   {

if (startDate.Date <= DateTime.Now.Date)
   {

if (startDate.Date <= DateTime.Today)
   {
Поскольку свойство Date (и Today) сбрасывает время до полуночи,все сравнения работают и игнорируют компонент time.