C#: Как преобразовать строку в DateTime, где строка может иметь любой стандартный формат даты и времени

Это - просто персональное предпочтение действительно и имеет отношение к расположению Ваших модулей Python.

Скажем, у Вас есть модуль, названный erikutils. Существует два способа, которыми это может быть модуль, у или Вас есть файл, названный erikutils.py на Вашем sys.path, или у Вас есть каталог, названный erikutils на Вашем sys.path с пустым __init__.py файл в нем. Тогда скажем, у Вас есть набор модулей, названных fileutils, procutils, parseutils, и Вы хотите, чтобы те были подмодулями под [1 110]. Таким образом, Вы делаете некоторые .py файлы названными fileutils.py, procutils.py, и parseutils.py:

erikutils
  __init__.py
  fileutils.py
  procutils.py
  parseutils.py

, Возможно, у Вас есть несколько функций, которые просто не принадлежат fileutils, procutils, или parseutils модули. И скажем, Вы не испытываете желание создавать новый модуль, названный miscutils. И, требуется быть в состоянии вызвать функцию как так:

erikutils.foo()
erikutils.bar()

вместо того, чтобы делать

erikutils.miscutils.foo()
erikutils.miscutils.bar()

Поэтому, потому что erikutils модуль является каталогом, не файлом, мы должны определить, это - функции в __init__.py файл.

В django, лучший пример, о котором я могу думать, django.db.models.fields. ВСЕ django *Полевые классы определяются в __init__.py файл в каталог django/db/models/fields . Я предполагаю, что они сделали это, потому что они не хотели переполнять все в гипотетическое модель django/db/models/fields.py, таким образом, они разделяют ее на несколько подмодулей ( related.py, files.py, например), и они засунули сделанный *Определения поля в самом полевом модуле (следовательно, __init__.py ).

7
задан InfantPro'Aravind' 21 December 2009 в 07:10
поделиться

4 ответа

Вы можете использовать перегрузку DateTime.ParseExact , которая принимает список форматов:

private static string[] formats = new string[]
    {
        "MM/dd/yyyy HH:mm:ss tt",
        "MM/dd/yyyy HH:mm:ss",
        "M/dd/yyyy H:mm:ss tt",
        "M/dd/yyyy H:mm:ss"        
    };

private static DateTime ParseDate(string input)
{
    return DateTime.ParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
}

Это вызовет исключение FormatException , если переданная строка не соответствуют ни одному из указанных форматов. Обратите внимание, что форматы, ожидающие AM / PM, должны появляться перед идентичными форматами без AM / PM ( «MM / dd / yyyy HH: mm: ss tt» предшествует «MM / dd / yyyy HH: mm: ss ").

Обновление
Как Henk указывает в комментариях, та же функциональность доступна при использовании TryParseExact , который устраняет исключительную ситуацию. Кроме того, в сочетании с типами, допускающими значение NULL, это можно сделать немного чище:

private static DateTime? ParseDate(string input)
{
    DateTime result;
    if (DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
    {
        return result;
    }
    return null;
}

Теперь он просто возвращает пустую ссылку, если не удается проанализировать ввод.

23
ответ дан 6 December 2019 в 05:48
поделиться

Взгляните на метод TryParseExact . Вот пример с первым случаем:

7
ответ дан 6 December 2019 в 05:48
поделиться

DateTime dt1 = DateTime.ParseExact ("2007/01/01 04:23:12", "гггг / мм / дд чч: мм: сс", System.Globalization.CultureInfo.CurrentCulture);

DateTime dt = Convert.ToDateTime ("01.01.2007 04:23:12", System.Globalization.CultureInfo.CurrentCulture);

System.Globalization.CultureInfo.CurrentCulture параметр формата

0
ответ дан 6 December 2019 в 05:48
поделиться

Вот все возможные форматы ..

  1. ММ / дд / гггг 22.08.2006
  2. дддд, дд ММММ гггг вторник, 22 Август 2006
  3. дддд, дд ММММ гггг ЧЧ: мм Вторник, 22 августа 2006 г., 06:30
  4. дддд, дд ММММ гггг чч: мм тт Вторник, 22 августа 2006 г., 06:30
  5. дддд, дд ММММ гггг Ч: мм Вторник, 22 Август 2006 г. 6:30
  6. дддд, дд ММММ гггг ч: мм тт вторник, 22 августа 2006 г., 6:30
  7. дддд, дд ММММ гггг ЧЧ: мм: сс Вторник, 22 августа 2006 г. 06:30:07
  8. ММ / дд / гггг ЧЧ: мм 22.08.2006 06:30
  9. ММ / дд / гггг чч: мм тт 22.08.2006 06:30
  10. ММ / дд / гггг Ч: мм 22.08.2006 6:30
  11. ММ / дд / гггг ЧЧ: мм: сс 22.08.2006 06:30:07
  12. ММММ дд 22 августа
  13. гггг '-' ММ '-' дд'T'ЧЧ ':' мм ':' ss.fffffffK 2006-08-22T06: 30: 07.7199222-04: 00
  14. ддд, дд МММ гггг ЧЧ ':' мм ':' сс 'GMT' Вт, 22 августа 2006 г. 06:30:07 GMT
  15. гггг '-' ММ '-' дд'Т'ЧЧ ':' мм ':' сс 2006-08-22T06: 30: 07
  16. HH: мм 06:30
  17. чч: мм tt 06:30 AM
  18. H: мм 6:30
  19. h: мм tt 6:30 AM
  20. ЧЧ: мм: сс 06:30:07
  21. гггг '-' ММ '-' дд ЧЧ ':' мм ':' сс'Z ' 22 августа 2006 г., 06:30: 07Z
  22. дддд, дд ММММ гггг ЧЧ: мм: сс Вторник, 22 августа 2006 г. 06:30:07
  23. гггг MMMM 2006 Август
2
ответ дан 6 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: