2016-10-31 3 views
-2

Я пытаюсь преобразовать значение DateTime? в Decimal. (Примечание: что DateTime? является Nullable)Как преобразовать значение nullable datetime в десятичный в C#

Из этого формата 4/1/2011 12:00:00 AM в этот формат (от Decimal типа) 20110401.

Как это можно достичь?

+1

вы уверены, что хотите «десятичную», а не «строку» ? Строковое представление в вашем формате может быть создано с помощью 'ToString':' DateTime.UtcNow.ToString ("yyyyMMdd") ' – Nico

+0

Да, оно должно быть десятичным – Nakres

+0

Затем сразу после выполнения' ToSting ("yyyyMMdd") 'convert to decimal –

ответ

0

Вы можете сделать это с немного математики:

DateTime? dt = DateTime.Today; 
decimal d = dt.Value.Year*10000 + dt.Value.Month*100 + dt.Value.Day 

... или преобразовать его:

DateTime? dt = DateTime.Today; 
decimal d = Convert.ToDecimal(dt.Value.ToString("yyyyMMdd")); 

В случае, если вы пытаетесь использовать это десятичное значение для сортировки целей, пожалуйста, рассмотреть что можно заказывать строки и DateTimes.

+0

не принимается год и день, а также tostring. – Nakres

+0

@Nakres Какой тип имеет ваш DateTime? – Jules

+0

@Nakres вы действительно говорите об этом [DateTime] (https://msdn.microsoft.com/de-de/library/system.datetime (v = vs.110) .aspx) – Jules

0

Как это:

DateTime? myDateTime = GetDateTime(); 
Decimal.Parse(myDateTime.Value.ToString("yyyyMMdd")); 

или:

DateTime myDateTime = GetDateTime(); 
Decimal.Parse(myDateTime.ToString("yyyyMMdd")); 

В зависимости от того, если DateTime является Nullable или нет.

Но вы действительно должны рассмотреть возможность его хранения каким-либо другим способом, чем Decimal, это будет похоже на сохранение номера телефона в качестве Long, which you really shouldn't do. В основном потому, что математические операции не имеют смысла, когда они выполняются на объекте, хранящемся таким образом.

+0

mydatetime не является строкой, поэтому она дает ошибку, когда я использую ToString ("yyyyMMdd") – Nakres

+0

@Nakres - Какая ошибка вам говорит? DateTime не обязательно должна быть строкой для вызова 'ToString (...)'. –

+0

@Nakres какой тип ваше фактическое время, хранящееся как первоначально? Фактический тип 'DateTime' содержит метод' .ToString' (в основном, покажите нам свой код). –

1

Вы можете попробовать это ,,

DateTime? dateTime = DateTime.Today; 
string dateStr = dateTime.ToString("MMddyyyy"); 
decimal dec = Convert.ToDecimal(dateStr); 
+0

Я собираюсь потерять сознание. как я могу использовать tostring для datetime. действительно ли код работает на вашем компьютере? – Nakres

+0

Метод ToString располагается внутри базового класса всех классов, поэтому он существует в любом классе, который вы создаете! –

+3

За исключением того, что это DateTime с нулевым значением, так что 'dateTime.Value.ToString (" MMddyyyy ")' – Crowcoder

0

Вы можете использовать ToBinary(), чтобы получить двоичное представление DateTime - это может, то, быть назначен на decimal.

DateTime dt = DateTime.Now; 
decimal dec = dt.ToBinary(); 

Это самое простое преобразование, которое не включает преобразование в строку и обратно. Если вы используете нулевую дату/время, просто используйте свойство Value, чтобы получить из него фактическое значение (с проверкой ошибок и т. Д.)