2013-07-25 4 views
2

Это образец я сделал в SQL ServerПреобразовать DateTime в Int

SELECT CAST(CAST('2012-01-25 10:00:00.000' AS DATETIME) AS INT) + 2 

Результат 40933

Как я могу добиться этого с помощью C#? Откуда и как это целое число приходит?

Ссылка: Convert from DateTime to INT, но это то, что мне нужно в C#

+0

Как и в метку времени? –

+0

Почему вы хотите сделать это на C#? –

+0

, потому что я работаю над приложением, использующим сервис, и я не могу использовать процедуру sql там –

ответ

4

Я не понимаю, почему вы должны представлять DateTime как целое число в C#, но вы можете использовать этот метод:

public static int DateTimeToInt(DateTime theDate) 
{ 
    return (int)(theDate.Date - new DateTime(1900, 1, 1)).TotalDays + 2; 
} 

И вы можете использовать этот метод для обратной операции:

public static DateTime IntToDateTime(int intDate) 
{ 
    return new DateTime(1900, 1, 1).AddDays(intDate - 2); 
} 
+0

Большое спасибо, мне нужно это, потому что в базе данных есть поле, которое представляет DateTime как это целое число, я думаю, что это для оптимизации .... , и я работаю над приложением окна-магазина, которое является расширением существующего приложения ... и только способ общения - это то, что DB - это сервис, поэтому мне нужно делать все манипуляции в моем PCL –

+1

@Arun: [вредные привычки пинать: mis - запрос даты/диапазона] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx) - вы должны * * не ** хранить даты как строки или ints - вы просто просите о неприятностях таким образом. Используйте типы данных DATE или DATETIME! –

+1

@Klaus не могли бы вы упомянуть, почему этот +/- 2? – Rezoan

2

расширения бросить DATETIME на отметку время

public static int DateTimeToInt(this DateTime theDate) 
{ 
    int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; 
    return unixTime; 
} 

лучше бросить DATETIME долго, используйте свойство DateTime.Ticks для этого

Смежные вопросы