Преобразовать строку в определенный формат DateTime

2

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

Мне нужно преобразовать строку, которая содержит дату и время для переменной DateTime. Я отформатировал строку в точном формате, который я хочу сохранить, но когда я конвертирую его в DateTime, он добавляет секунды, которые я не хочу. Я хочу, чтобы он хранился как 01/01/2010 09:00. Здесь код, который я использовал до сих пор:

DateTime.ParseExact(startTime,"MM/dd/yyyy hh:mmtt", null);

.., но он добавляет к нему секунды. Просьба сообщить.

  • 0
    Пожалуйста, не дублируйте теги вроде «ASP.NET C #» в заголовке. Просто оставьте их в тегах.
Теги:

5 ответов

7
Лучший ответ

Если он хранится как тип данных DateTime, он сохранен правильно, но ваш пользовательский интерфейс отображается неправильно. Тип данных DateTime всегда имеет секунды (миллисекунды и т.д.) Независимо от того, как вы устанавливаете значение. Проблема заключается в том, как он отображается обратно пользователю.

Вам нужно отобразить нужную дату в правильном формате строки во время отображения, как в

Label1.Text = startTime.ToString("MM/dd/yyyy hh:mmtt");

Изменить - добавлено

Чтобы отформатировать его в GridView, см. здесь: http://peterkellner.net/2006/05/24/how-to-set-a-date-format-in-gridview-using-aspnet-20using-htmlencode-property/

  • 0
    я делаю string-> DateTime, а не DateTime-> string ... Мне нужно сохранить это в базе данных с типом DateTime
  • 1
    См. Мое редактирование ... Вы не можете изменить то, как база данных (или среда выполнения .Net и т. Д.) Хранила определенный тип данных. Как сказал бы Йоги Берра, если бы он был программистом, тип данных является тем, чем он является, и содержит поля, которые он содержит. Тип данных datetime будет иметь секунды независимо от того, как вы их вставили. Это действительно просто вопрос того, как это отображается обратно к вам.
Показать ещё 5 комментариев
3

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

DateTime parsedDateTime = DateTime.ParseExact(startTime, "MM/DD/YYYY hh:mmtt", null);
string dateTime = parseDateTime.ToString("MM/DD/YYY hh:mmtt");

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

Если вы храните его в базе данных, понимайте, что база данных также сохранит всю эту информацию независимо от того, передаете ли вы ее или нет. Существуют разные типы SQL DateTime, такие как SmallDate и т.д., Которые хранят различные количества данных DateTime, не знают, есть ли там тот, который хранится в течение часа, а не секунды, но с SQL вы также можете отформатировать способ, которым вы выбираете данные или просто выберите его в свой С# в качестве объекта С# DateTime, а затем, когда вы представляете его снова, отформатируйте ToString(), чтобы он не отображал данные, которые вы не хотите/имеете.

1

Попробуйте это.

    DateTime dt;
    if (DateTime.TryParse(startTime, out dt))
    {
        string newDateTime = dt.ToString("MM/dd/yyyy hh:mmtt");
    }
0

Вот пример для этого.

    String strDate="12/20/2013";
    string strFormat="dd/MM/yyyy";
    DateTime objDT;

    if (DateTime.TryParseExact(strDate, strFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out objDT) == true)
    {
        Response.Write("<b>Formatted DateTime : </b>" + objDT.ToString());
    }
    else
    {
        Response.Write("<b>Not able to parse datetime.</b>");
    }
0

Если у вас есть строка, вы должны сначала гарантировать, что она действительно может быть преобразована в дату и время. Итак, сначала сделайте это. Когда у вас есть дата-время, сохраните его в базе данных, как есть, вам не нужно обходить формат, (как говорили другие здесь).

а затем, если вам нужно, переформатируйте его в другое представление, только если вам нужно его где-то отобразить.

string s = "21 June 2010 09:23:56";
DateTime dt;
if (DateTime.TryParse(s, out dt))
   // dit is a valid datetime, storeit or whatever
else
   throw ApplicationException(
        "{0} is not a valid datetime.", s);
//  --  and now you can redisplay dt any way you want -----
debug.Print(s.ToString("d MMM yyyy");
debug.Print(s.ToString("HH:mm:ss");
debug.Print(s.ToString("dddd, d MMM yy");
debug.Print(s.ToString("MMM d, yyyy");
debug.Print(s.ToString("HH:mm:ss dddd");

//и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню