как я могу удалить время из даты и времени - PullRequest
0 голосов
/ 28 января 2011

mvc - c # - aspx => У меня есть DDL (выпадающий список), который показывает даты из таблицы, DDL используется для фильтрации элементов, показанных в таблице.таблица работает, фильтры работают, единственное уродливое, что фильтр показывает время с датой: 12/12/2010 12: 00: 00: 00: 00 утра или что-то подобное, я пытаюсь отбросить время какэто приходит из таблицы, но если есть лучший способ, пожалуйста, помогите, я попробовал следующее: в controller => string.format: говорит мне, что это не действительный sql, что когда-либо .... ToString ("MM /дд / гггг ", н) говорит мне то же самое, я также пытался конвертировать (varchar (12), н, 101), думая, что это может занять сервер SQL, но это тоже не понравилось, я даже попытался добавить формат вКлюч DDL в файле представления, и, как я и ожидал, он не может найти что-либо с этим ключом.

// target date -- this code is from my controller

    if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "")
    {
        TargetDate = Request.Form["TARGET_DATE"];
        ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate);
        predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate));
    }
    else
    {
        TargetDate = null;
        ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE");
    }

Есть ли способ отформатировать 'n', следуя 'MM / dd / yyyy'?или как будет лучший способ сделать это?или что я делаю не так?..... спасибо

Ответы [ 5 ]

2 голосов
/ 28 января 2011

Что-то, что вы должны понимать, это то, что оба типа DateTime SQL и CLR на самом деле хранятся как целое число, содержащее количество «тиков» относительно «эпохи».Таким образом, время неотделимо от даты на этом уровне;значение, представляющее дату и время, просто делится равномерно на количество тиков в день.Не существует типа CLR, который является просто Date.

Чтобы "игнорировать" время при преобразовании его в строку, вы можете использовать перегрузку ToString () DateTime: Convert.ToDateTime(TargetDate).ToString("MM/dd/yyyy"); Однако, если вы не используетесделав это для p.TARGET_DATE, ваше сравнение, скорее всего, не удастся.

0 голосов
/ 30 ноября 2017

Метод .ToString принимает необязательный универсальный параметр форматирования.

Чтобы удалить компонент времени в вашей выходной строке, вы можете использовать .ToString("MM/dd/yyyy").

Пример

В следующем примере я достигаю следующих целей:

  1. Задайте атрибут TargetDate в зависимости от того, существует ли параметр сеанса TARGET_DATE.

  2. Создайте начальный список DateTime и заполните его результатом вашего запроса linq на основе параметров сеанса TARGET_DATE.

  3. Я создаю новый список строк и копируюСписок DateTime, применяя желаемое форматирование.

  4. Список строк затем постоянно используется в качестве источника данных для раскрывающегося списка.

  5. Я не уверен относительно цели строки кода, основанной на параметре сеанса TARGET_DATE, которая устанавливает переменную predicate.Я оставил его, если этого требует окружающий код.

Код

После редактирования предоставленного кода, пожалуйста, используйте следующий исправленный код:

bool IsDateset = (Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "";

TargetDate = IsDateset ? Request.Form["TARGET_DATE"] : null;

List<DateTime> TargetDatesAsDateTime = null;

if (IsDateset)
{
    List<DateTime> TargetDatesAsDateTime = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate);

    predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate)); // I'm unsure as to the purpose of this line of code. I left it in in case the surrounding code requires it.

}
else
{
    List<DateTime> TargetDatesAsDateTime = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE");

}

List<string> TargetDateAsString = new List<string>();

if(TargetDatesAsDateTime != null || TargetDatesAsDateTime.Count > 0)
{           
    foreach(DateTime d in TargetDatesAsDateTime)
    {
        string s = d.ToString("dd/MM/yyyy");

        TargetDateAsString.Add(s);

    }

}

ViewData["TARGET_DATE"] = TargetDatesAsString;

Я оставлю это вам, чтобы уменьшить и отформатировать код по вашему усмотрению.

0 голосов
/ 01 февраля 2011

спасибо всем, кто помог ... я наконец смог получить дату для показа без времени в моем выпадающем списке (DDL).Вот как я это сделал.

        if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "")
    {
        TargetDate = Request.Form["TARGET_DATE"];

        IEnumerable<SelectListItem> tarDate =
            from n in _db.ACTION_PLANs
            select new SelectListItem
            {
                Selected = (TargetDate == n.TARGET_DATE.Date.ToString()),
                Text = string.Format("{0:MM/dd/yyyy}", n.TARGET_DATE.Date),
                Value = n.TARGET_DATE.ToString(),
            };


        ViewData["TARGET_DATE"] = tarDate;

        predicate = predicate.And(p => p.TARGET_DATE.ToString() == TargetDate);

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

0 голосов
/ 28 января 2011

"Сбрасывание времени" на выходе из базы данных просто установит компонент времени на 0 - т.е. полночь или 12: 00: 00.000 утра.

Вам нужно будет отсортировать формат в слое презентации, чтобы отображалась только дата.

0 голосов
/ 28 января 2011

Я думаю, вы не видите, какие типы данных вы действительно получаете. Вывод «12/12/2010 12: 00: 00: 00: 00AM» выглядит так, как будто somethign вызывает .ToString () за кулисами для типа, который в конечном итоге распаковывает данные в тип DateTime.

Исходя из того, что вы указали в описании, попробуйте

((DateTime)ViewData["TARGET_DATE"])).ToString("MM/dd/yyyy")

Может быть, вам повезло, и это работает. Или попробуйте что-нибудь излишнее с этим:

DateTime.Parse(ViewData["TARGET_DATE"].ToString()).ToString("MM/dd/yyyy")

В любом случае, оба примера являются очень плохим кодом, это просто для того, чтобы вы могли начать решать проблему (т. Е. Использовать TryParse () во втором примере или использовать ключевое слово «as» в первом примере). В вашей очищенной версии используйте полную проверку ошибок, включая проверку значений null / empty / DBNull.Value.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...