C# turn Datepicker value to Datetime? - c#

How do i turn a Datepicker to Datetime or vice versa
void Submit()
{
TimeSpan Days = Date-DateTime.Now;
CountdownScreen resultpage = new CountdownScreen(Subject.Text, Date.Text);
NavigationService.Navigate(resultpage);
}
this is the code ive been attempting to work with to get the days from Date (the variable from datepicker) and the current date to get the difference in days
With help of Rufus L the new code looks like
TimeSpan duration = Date.SelectedDate.GetValueOrDefault() - DateTime.Now;
//+1 to add the extra day as it seems to round down days
int days = duration.Days + 1;

A DatePicker control has a .SelectedDate property that represents the selected DateTime value:
TimeSpan duration = datePicker.SelectedDate.GetValueOrDefault() - DateTime.Now;
Or, to get the difference in days:
// TotalDays is a double, since there's a time component, it could be something like 1.25
var days = (datePicker.SelectedDate.GetValueOrDefault() - DateTime.Now).TotalDays;

Related

Calculating the Number of Days between two Dates and displaying it in a Label

Hi I'm trying to capture two dates selected by the user in a C# Calendar Control and I want the date range to be displayed in a label. I have worked out on the following code but it generates a Minus value ; not the actual date range.
DateTime from = CalFrom.SelectedDate;
DateTime to = CalTo.SelectedDate;
double days = (CalTo.SelectedDate - CalFrom.SelectedDate).TotalDays;
TimeSpan t = to - from;
double noOfDays = t.TotalDays;
TimeSpan ts = to - from;
double differnceindays = ts.TotalDays;
lblNoofDays.Text = differnceindays.ToString();
This code is working perfectly for me for calculating the number the days between two days.
DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(10);
TimeSpan difference = d2 - d1;
var days = difference.TotalDays;
DateTime.Now.Subtract(startDate).Days.ToString();
try to calculate no of days between two dates
string days = (date2 - date1).Value.Days.ToString();
The only problem I see is that you assume the start and end dates will be correctly range checked, meaning start date is never greater than end date (which would produce negative values for total days). If you want to correct for the fact that start date may be after end date, then this should work.
DateTime startDate = DateTime.Now.AddDays(-94); // Example random 94 day span..
DateTime endDate = DateTime.Now;
TimeSpan duration = endDate > startDate ? endDate - startDate : startDate - endDate;
double daysBetweenDates = duration.TotalDays;
Note: "daysBetweenDates" will include fractional days (thus the double type). Also, the code above assumes local time. If you want UTC you will need to account for that.

How to Initialize 8 hours in DataTime formate

I want to initialize 8 hours in DateTime format.I tried like this
DateTime stayingTime = 8;
TimeSpan span = (stayingTime-runningTime);
I will get runningTime from some other source. I want to subtract that runningTime with 8 hours and display the answer in following format hh:mm
You are looking for the TimeSpan-structure:
TimeSpan stayingTime = TimeSpan.FromHours(8);
TimeSpan span = stayingTime - runningTime;
If you need it as DateTime you could use the TimeOfDay property:
DateTime stayingTime = new DateTime().AddHours(8);
TimeSpan span = stayingTime.TimeOfday - runningTime;
If you want to output it with hh:mm-format use TimeSpan.ToString:
span.ToString("hh':'mm")

How to get Difference hours Between two date

I want get diffrences Day,Hour and Day between two days.
I use belowe Code :
DateTime LastDate = DateTime.Parse("2/12/2015 11:24:23 AM");
int differenceDay = DateTime.Now.Subtract(LastDate).Days;
int differenceHoure = DateTime.Now.Hour - LastDate.Hour;//returns -11
int differenceMinute = DateTime.Now.Minute - LastDate.Minute;
When I want get Hours its return mines (-11 e.t).
How can I get positive Diffrence Hour ?
anyone can you help me?
I want get Last Dat and show its by string how days afterd now.
You're subtracting component-wise (i.e. "this hour-of-day minus that hour-of-day, this minute-of-hour minus that minute-of-hour"). Don't do that - it won't work if the current hour-of-day is earlier than the hour-of-day of lastDate, or the same for minute-of-hour - you get a negative value, exactly as you've seen.
Instead, subtract one DateTime from another to get a TimeSpan and use that single TimeSpan for all the components:
DateTime lastDate = DateTime.Parse("2/12/2015 11:24:23 AM");
TimeSpan difference = DateTime.Now - lastDate;
int days = difference.Days;
int hours = difference.Hours;
int minutes = difference.Minutes;
That will still be negative if lastDate is after DateTime.Now, of course.
Note that this will give you a result which is meaningful if you display all three components. For example, it might give you "2 days, 3 hours and 10 minutes". If instead you want to represent the same TimeSpan as "2.194 days" or "51.166 hours" or "3160 minutes" then you can use TotalDays, TotalHours and TotalMinutes.
If you always want a positive TimeSpan - the equivalent of Math.Abs but for TimeSpan you can just use TimeSpan.Duration():
TimeSpan difference = (DateTime.Now - lastDate).Duration();

Difference between two datetimes

I have a datetime, I want to show the difference from DateTime.Now to received datetime and bind it. The result should be something like this:
1d 15h 13m 7s
What is the best way to do it? StringFormat? IValueConverter?
I'd suggest using the Timespans ToString method and custom TimeSpan format strings
Timespans if you aren't already aware are designed for measuring time intervals like this and can be convenienty obtained by subtracting one date from another.
var startDate = new DateTime(2013,1,21);
var currentDate = DateTime.Now;
TimeSpan interval = currentDate - startDate;
string intervalInWords = String.Format("{0:%d} days {0:%h} hours {0:%m} minutes {0:%s} seconds", interval);
Console.WriteLine(intervalInWords);
This will print out something like
267 days 10 hours 45 minutes 21 seconds
As has been noted in comments because these datetimes may be in different timezones/daylight saving times you should be very careful using this technique. Using UTCtime for both which is consistent throughout the whole year should be sufficient if that is feasible. In general it is often best policy to save all datetimes as UTC along with the timezone/offset (if required) and then if they are needed in a specific timezone offset convert on display.
Use TimeSpan
Example:
DateTime oldDate = new DateTime(2002,7,15);
DateTime newDate = DateTime.Now;
// Difference in days, hours, and minutes.
TimeSpan ts = newDate - oldDate;
// Difference in days.
int differenceInDays = ts.Days;
Now you can change it according to your requirement.
The other answers are correct from the formatting point of view, but just to address the WPF angle, I'm guessing you want to update a label/textbox so it constantly contains an accurate duration?
If so, you can do this with the timer and the dispatcher.
Timer code:
//duration in milliseconds, 1000 is 1 second
var timer = new Timer(1000);
timer.Elapsed += timer_Elapsed;
timer.Start();
Timer elapsed code:
//this is set elsewhere
private readonly DateTime _received;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Application.Current.Dispatcher.Invoke(
DispatcherPriority.Normal,
new Action(()
=> //replace label1 with the name of the control you wish to update
label1.Content =
string.Format("{0:%d} days {0:%h} hours {0:%m} minutes {0:%s} seconds"
, (DateTime.Now - _received))));
}
You can use TimeSpan, also look out [here][1]
[1]: Showing Difference between two datetime values in hours i would suggest you to go through TimeSpan.
DateTime startDate = Convert.ToDateTime(2008,8,2);
DateTime endDate = Convert.ToDateTime(2008,8,3);
TimeSpan duration = startDate - endDate;
Create a property like DateProp of type DateTime to which you'll bind on your XAML , and assuming your property is Other_date_here, initialize it like this:
DateProp = DateTime.Now.Subtract(Other_date_here);
Last, on your XAML, bind it and set the formatting like this:
Text="{Binding Date, StringFormat=d day H hours m minutes s seconds}"
(or whatever other format you like:).

How to set current time to a value

I was just wondering if there is a way to get the current time and set it into a value.
If its 12:06 AM.. I want to get that time and set it into currentTime.
Example
float currentTime = 0;
currentTime = 12.06;
As others have mentioned, the DateTime class would be ideal for this, and to work out the difference between 2 date/times:
DateTime end = DateTime.Now;
DateTime start = new DateTime(2011, 12, 5, 12, 6,0);
double hours = (end - start).TotalHours;
The subtraction of DateTime objects results in a TimeSpan object that you can use to see the hours/minutes etc.
try DateTime class
DateTime dt = DateTime.Now;
Is this what you're looking for?
DateTime currentTime;
currentTime = DateTime.Now;
Don't use floats or strings. You can do all kinds of cool things using DateTime.
Here's how you'd get the hours that someone worked:
var clockIn = new DateTime(2011,12,4,9,0,0); // December 4th, 9 AM
var clockOut = new DateTime(2011,12,4,17,0,0); // December 4th, 5 PM
var duration = clockOut - clockIn; // TimeSpan
Console.Write(duration.TotalHours); // 8
A few people have mentioned how, but as a 'better' recommendation you should use
DateTime currentTime = DateTime.UtcNow
Otherwise you have issues when the clocks go back, if your timing code is run on those days. (plus it is far easier to alter the UTC time to local time than it is to convert a '1am' to UTC (as there will be two of them when the clocks go back)
Well if you really what it as a float then try:
var currentDate = DateTime.Now;
float currentTime = float.Parse((currentDate.Hour > 12 ? currentDate.Hour -12 :
currentDate.Hour) + "." + currentDate.Minute);
I wouldn't recommend comparing dates or time with floats. A better options would be to use timespans.
You should be using a Timespan instance for time related values, you can use the flexibility to get the required values like
TimeSpan ts = DateTime.Now.TimeOfDay;
ts.ToString("hh:mm") // this could be what you are looking for
You could then use ts.TotalHours which would give you fractional hours (as a double) else you could construct a string specifically using ts.Hours ..ts.Minutes play around and it could be prove useful.
Try the following:
DateTime StartTime=StartTime value;
DateTime CurrentTime=DateTime.Now;
TimeSpan dt = CurrentTime.Subtract(StartTime);
In dt you will get a working time period.
If you want to have the difference between two times, then do this:
DateTime dateOne = DateTime.Parse(enteredTime);
DateTime dateTwo = DateTime.Now;
TimeSpan difference = dateOne - dateTwo;

Categories

Resources