SqlDateTime. MinValue! = DateTime. MinValue, почему?

Если возможно, используйте pandas.read_fwf :

import pandas as pd

temp=u"""A    b    C    D    E
1    2         4    5
2    7    r    6    s
g         j    l    4"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_fwf(pd.compat.StringIO(temp))
print (df)
   A    b    C  D  E
0  1  2.0  NaN  4  5
1  2  7.0    r  6  s
2  g  NaN    j  l  4

69
задан AMissico 11 November 2010 в 04:32
поделиться

5 ответов

SpamBayes поддерживается и является зрелым (то есть он работает без необходимости постоянно выпускать новые выпуски). Он легко сделает то, что вы хотите. Обратите внимание, что SpamBayes является только слабо байесовским (он использует комбинирование по хи-квадрат), но, вероятно, вы предпочитаете какую-либо статистическую классификацию на основе токенов, а не что-то конкретно байесовское. DateTimeOffset ), которые действительно предлагают увеличенный диапазон и точность, и тесно сопоставляются с типом данных DateTime в .NET. Например, тип данных DateTime2 имеет диапазон дат от 0001-01-01 до 9999-12-31.

Стандартный тип данных «Дата / время» SQL Server всегда имел минимальное значение 01/01/1753 ( и действительно все еще имеет!). Должен признаться, мне тоже было любопытно, что значило это значение, так же как и некоторые раскопки. Я обнаружил следующее:

В период между 1 годом нашей эры и сегодняшним днем ​​западный мир фактически использовал два основных календаря. : юлианский календарь Юлия Цезаря и григорианский календарь папы Григория XIII. Два календаря отличаются только одним правилом: правилом определения високосного года. В юлианском календаре все годы, делимые на четыре, являются високосными. В григорианском календаре все годы, кратные четырем, являются високосными, за исключением того, что годы, кратные 100 (но не делимые на 400), не являются високосными. Таким образом, 1700, 1800 и 1900 годы являются високосными годами в юлианском календаре, но не в григорианском календаре, в то время как 1600 и 2000 годы являются високосными годами в обоих календарях.

Когда папа Григорий XIII представил свой календарь в 1582 году, он также велел пропустить дни между 4 октября 1582 года и 15 октября 1582 года, то есть он сказал, что днем ​​после 4 октября должен быть 15 октября. Однако многие страны откладывали переход. Англия и ее колонии не переходили с юлианского на григорианский расчет до 1752 года, поэтому для них пропущенные даты были между 4 сентября и 14 сентября 1752 года. Другие страны переключались в другое время, но 1582 и 1752 являются релевантными датами для СУБД, которые мы обсуждаем.

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

Вот как СУБД «Большой восьмерки» решают следующие вопросы:

  • Притвориться, что коммутатора не было. Это то, чего требует стандарт SQL, хотя стандартный документ неясен: он просто говорит, что даты «ограничены естественными правилами для дат с использованием григорианского календаря» - какими бы ни были «естественные правила». Этот вариант выбрал DB2. Когда есть предлог, что правила одного календаря всегда применяются даже в те времена, когда никто не слышал о календаре, Технический термин заключается в том, что действует «пролептический» календарь. Так, например, мы могли бы сказать, что DB2 следует грипорианскому календарю с пролетами.

  • Избегайте проблемы полностью. Microsoft и Sybase установили свои минимальные значения даты на 1 января 1753 года, благополучно пройдя время, когда Америка переключала календари. Это оправданно, но время от времени появляются жалобы на то, что этим двум СУБД не хватает полезной функциональности, которой обладают другие СУБД, и чего требует стандарт SQL.

  • Выбор 1582. Это то, что сделал Oracle. Пользователь Oracle обнаружит, что арифметическое выражение даты 15 октября 1582 года минус 4 октября 1582 года дает значение 1 день (потому что 5–14 октября не существует) и что дата 29 февраля 1300 года действительна (потому что юлианский скачок правило года применяется). Почему у Oracle возникли дополнительные проблемы, когда стандарт SQL не Кажется, это требуется? Ответ заключается в том, что пользователям может потребоваться это. Историки и астрономы используют эту гибридную систему вместо григорианского календаря. (Это также опция по умолчанию, которую Sun выбрал при реализации класса GregorianCalendar для Java - несмотря на название, GregorianCalendar - это гибридный календарь.)

Эта цитата выше взята из следующей ссылки:

Настройка производительности SQL: даты в SQL

129
ответ дан 24 November 2019 в 13:42
поделиться

Поскольку в SQL Server минимальная дата, которая может храниться в поле даты и времени (1753/1/1), не равна MinValue типа данных DateTime .NET (0001 / 1/1).

12
ответ дан 24 November 2019 в 13:42
поделиться

SQL использует другое внутреннее представление для DateTime.

5
ответ дан 24 November 2019 в 13:42
поделиться

Две разные группы решили, что для них означает «минимум» в отношении даты / времени.

7
ответ дан 24 November 2019 в 13:42
поделиться

Вам придется создать множество пользовательских JComponents. Кроме этого, возможно.

-121--3506757-

Можно использовать метод разделения

private static void DoIt()
{
    string x = "blablablamorecontentblablabla?name=michel&score=5&age=28&iliedabouttheage=true";

    string[] arr = x.Split("?".ToCharArray());
    if (arr.Length >= 2)
    {
        string[] arr2 = arr[1].Split("&".ToCharArray());
        foreach (string item in arr2)
        {
            string[] arr3 = item.Split("=".ToCharArray());
            Console.WriteLine("key = " + arr3[0] + " value = " + arr3[1]);
        }
    }
}

Вывод:

key = name value = michel
key = score value = 5
key = age value = 28
key = iliedabouttheage value = true
-121--2743065-

1753 была датой первого принятия григорианского календаря (Англия). Что касается того, почему это было выбрано вместо 01/01/0001 - это, несомненно, наследие от того, когда SQL Server был Sybase еще в 1990-х годах. Они, должно быть, приняли решение по проектированию на ранней стадии, и команда Microsoft SQL не нашла причины для его изменения.

После развертывания .NET и интеграции ее в SQL Server теперь существует объект DateTime2 для совместимости. Если вы - пользователь NHibernate, вы можете обеспечить этот тип в своих отображениях типа, чтобы избежать DateTime. Минута проблемы

.NET Dates обслуживает другие календари помимо Грегорианского one:

  • Calendar
    • ChineseLunisolarCalendar
    • EastAsianLunisolarCalendar
    • GregorianCalendar
    • HebrewCalendar
    • HijriCalendar
    • JapaneseCalendar
    • JapaneseLunisolarCalendar
    • JulianCalendar
    • KoreanCalendar
    • KoreanLunisolarCalendar
    • PersianCalendar
    • TaiwanCalendar
    • TaiwanLunisolarCalendar
    • ThaiBuddhistCalendar
    • UmAlQuraCalendar

The JulianCalendar infact, предшествует DateTime. MinValue

11
ответ дан 24 November 2019 в 13:42
поделиться
Другие вопросы по тегам:

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