MadBoy
MadBoy

Reputation: 11114

DateTime convert to Date and then back to DateTime in C#

I use this to convert DateTime value into Date and then I add 00:00:00 and 23:59:59 to make sure whole day is taken into consideration when counting stuff. I'm pretty sure it's wrong way of doing things. What would be the right way?

        DateTime varObliczOd = DateTime.Parse(dateTimeWycenaPortfelaObliczDataOd.Value.ToShortDateString() + " 00:00:00");
        DateTime varObliczDo = DateTime.Parse(dateTimeWycenaPortfelaObliczDataDo.Value.ToShortDateString() + " 23:59:59");

Upvotes: 4

Views: 2457

Answers (8)

Unsliced
Unsliced

Reputation: 10552

It would help to know why you're needing it, but this would work.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Date;
DateTime varObliczDo = varObliczOd.AddDays(1).AddSeconds(-1);

Using the Date attribute and then manipulating them directly to create the required time component - no need to bother with parsing and conversion.

Upvotes: 2

Thibault Falise
Thibault Falise

Reputation: 5885

You can use the following properties / methods on a DateTime object to get your values :

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Date;
DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataOd.AddDayes(1).AddTicks(-1);

Upvotes: 2

Enyra
Enyra

Reputation: 17992

You could work with TimeSpan:

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd - new TimeSpan(dateTimeWycenaPortfelaObliczDataOd.Hours, dateTimeWycenaPortfelaObliczDataOd.Minutes, dateTimeWycenaPortfelaObliczDataOd.Seconds);

Like that you avoid at least the parsing, which can fail depending on the local culture settings.

Upvotes: 0

Joshua
Joshua

Reputation: 8212

You could use the Date property of the DateTime object to accomplish what you need.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Value.Date;
DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataDo.Value.Date.AddDays(1);

If you really want it to end at 23:59:59 you can do:

DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataDo.Value.Date.AddDays(1).AddSeconds(-1);

Will set varObliczDo to be your ending date with no time plus one day (at midnight). So if dateTimeWycenaPortfelaObliczDataDo was 2010-03-05 16:12:12 it would now be 2010-03-06 00:00:00.

Upvotes: 1

M.A. Hanin
M.A. Hanin

Reputation: 8084

if dateTimeWycenaPortfelaObliczDataOd is of type DateTime, You can use:

dateTimeWycenaPortfelaObliczDataOd.Date

to get the date part only (time will be 00:00:00...). If you want to get the very last tick of the date, you can use:

dateTimeWycenaPortfelaObliczDataOd.Date.AddDays(1).AddTicks(-1)

but you really better work with the next date (.AddDays(1)).

In any case, there is no need to convert to string and back to DateTime.

Upvotes: 11

IordanTanev
IordanTanev

Reputation: 6250

DateTime newDate = new DateTime( oldDate.Year, oldDate.Month, oldDate.Day, 23, 59,59 ) DateTime newDate = new DateTime( oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0 )

Upvotes: 0

Gerrie Schenck
Gerrie Schenck

Reputation: 22378

Something like this maybe? I've typed this out of my head, there are probably some mistakes in the code.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.AddSeconds(-dateTimeWycenaPortfelaObliczDataOd.Seconds).AddMinutes(-dateTimeWycenaPortfelaObliczDataOd.Minutes).AddHours(-dateTimeWycenaPortfelaObliczDataOd.Hours);

DateTime varObliczDo  = new DateTime(dateTimeWycenaPortfelaObliczDataDo.Year, dateTimeWycenaPortfelaObliczDataDo.Month, dateTimeWycenaPortfelaObliczDataDoDay, 23, 59, 59);

Upvotes: 0

Software.Developer
Software.Developer

Reputation: 999

DateTime objects have a Date property which might be what you need.

Upvotes: 5

Related Questions