Это - просто персональное предпочтение действительно и имеет отношение к расположению Ваших модулей 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
).
Вы можете использовать перегрузку 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;
}
Теперь он просто возвращает пустую ссылку, если не удается проанализировать ввод.
Взгляните на метод TryParseExact . Вот пример с первым случаем:
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 параметр формата
Вот все возможные форматы ..
- ММ / дд / гггг 22.08.2006
- дддд, дд ММММ гггг вторник, 22 Август 2006
- дддд, дд ММММ гггг ЧЧ: мм Вторник, 22 августа 2006 г., 06:30
- дддд, дд ММММ гггг чч: мм тт Вторник, 22 августа 2006 г., 06:30
- дддд, дд ММММ гггг Ч: мм Вторник, 22 Август 2006 г. 6:30
- дддд, дд ММММ гггг ч: мм тт вторник, 22 августа 2006 г., 6:30
- дддд, дд ММММ гггг ЧЧ: мм: сс Вторник, 22 августа 2006 г. 06:30:07
- ММ / дд / гггг ЧЧ: мм 22.08.2006 06:30
- ММ / дд / гггг чч: мм тт 22.08.2006 06:30
- ММ / дд / гггг Ч: мм 22.08.2006 6:30
- ММ / дд / гггг ЧЧ: мм: сс 22.08.2006 06:30:07
- ММММ дд 22 августа
- гггг '-' ММ '-' дд'T'ЧЧ ':' мм ':' ss.fffffffK 2006-08-22T06: 30: 07.7199222-04: 00
- ддд, дд МММ гггг ЧЧ ':' мм ':' сс 'GMT' Вт, 22 августа 2006 г. 06:30:07 GMT
- гггг '-' ММ '-' дд'Т'ЧЧ ':' мм ':' сс 2006-08-22T06: 30: 07
- HH: мм 06:30
- чч: мм tt 06:30 AM
- H: мм 6:30
- h: мм tt 6:30 AM
- ЧЧ: мм: сс 06:30:07
- гггг '-' ММ '-' дд ЧЧ ':' мм ':' сс'Z ' 22 августа 2006 г., 06:30: 07Z
- дддд, дд ММММ гггг ЧЧ: мм: сс Вторник, 22 августа 2006 г. 06:30:07
- гггг MMMM 2006 Август