I have a problem declaring a time variable with a value of 5 minutes and I want to use this variable to subtract to 4:30 pm string. But I don't know how do I declare that variable. Is there an easy way to subtract that 4:30 pm string?
while (reader.Read())
{
AMSetTime = (reader["AMOutTime"].ToString());
PMSetTime = (reader["PMOutTime"].ToString());
}
TimeSpan timeUpdateCount = DateTime.Parse(PMSetTime).TimeOfDay;
TimeSpan minusFiveMinutes(00:05); //Error here
We define timespan of minutes with the following way:
TimeSpan interval = TimeSpan.FromMinutes(5);
Then you can use this timespan as you wish.
Specifically, in your case you can try the following:
TimeSpan interval = TimeSpan.FromMinutes(5);
TimeSpan timeUpdateCount = DateTime.Parse(PMSetTime).TimeOfDay-interval;
Related
I am trying to create script that checks is the current time passed, but getting some errors.
DateTime currentTime = DateTime.Now;
TimeSpan pauseMin = TimeSpan.FromMinutes(1);
TimeSpan compare = currentTime + pauseMin;
if (currentTime >= compare)
return null;
I would write this as
DateTime currentTime = DateTime.Now;
TimeSpan pauseMin = TimeSpan.FromMinutes(1);
DateTime compare = currentTime.Add(pauseMin);
if (currentTime >= compare) {
return null;
}
This uses the type of object that you are trying to represent with everything. DateTime's can have Timespan's added to them: https://msdn.microsoft.com/en-us/library/system.datetime.add%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Or Istern's answer if you are always just adding an integer of minutes to the time.
You can't compare DateTime and TimeSpan.
Try
var compare = currentTime.AddMinutes(1)
If you need to somehow use TimeSpan, use Jamie F's answer.
DateTime and TimeSpan is different. You can use currentTime like this:
TimeSpan currentTime = TimeSpan.FromTicks(DateTime.Now.Ticks);
And you can get passed minutes like this:
double minutes = (compare - currentTime).TotalMinutes;
If you just want to pause for 1 minute, you can use
System.Threading.Thread.Sleep(1000 * 60); // 1 minute = 60000 milliseconds
If you want your function to run for 1 minute, you can use something like
var returnAt = DateTime.Now().AddMinutes(1);
while ( true )
{
// your code here ?
if ( DateTime.Now() >= returnAt ) return null;
}
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:).
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;
How to check if 20 minutes have passed from current date?
For example:
var start = DateTime.Now;
var oldDate = "08/10/2011 23:50:31";
if(start ??) {
//20 minutes were passed from start
}
what's the best way to do this?
Thanks :)
You should convert your start time to a UTC time, say 'start'.
You can now compare your start time to the current UTC time using:
DateTime.UtcNow > start.AddMinutes(20)
This approach means that you will get the correct answer around daylight savings time changes.
By adding time to the start time instead of subtracting and comparing the total time on a TimeSpan you have a more readable syntax AND you can handle more date difference cases, e.g. 1 month from the start, 2 weeks from the start, ...
var start = DateTime.Now;
var oldDate = DateTime.Parse("08/10/2011 23:50:31");
if ((start - oldDate).TotalMinutes >= 20)
{
//20 minutes were passed from start
}
var start = DateTime.Now;
var oldDate = DateTime.Parse("08/10/2011 23:50:31");
if(start.Subtract(oldDate) >= TimeSpan.FromMinutes(20))
{
//20 minutes were passed from start
}
Parse oldDate into a DateTime object (DateTime.Parse).
Subtract the parsed date from start. This will return a TimeSpan.
Inspect TotalMinutes.
I was able to accomplish this by using a JodaTime Library in my project. I came out with this code.
String datetime1 = "2012/08/24 05:22:34";
String datetime2 = "2012/08/24 05:23:28";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss");
DateTime time1 = format.parseDateTime(datetime1);
DateTime time2 = format.parseDateTime(datetime2);
Minutes Interval = Minutes.minutesBetween(time1, time2);
Minutes minInterval = Minutes.minutes(20);
if(Interval.isGreaterThan(minInterval)){
return true;
}
else{
return false;
}
This will check if the Time Interval between datetime1 and datetime2 is GreaterThan 20 Minutes. Change the property to Seconds. It will be easier for you know. This will return false.
var end = DateTime.Parse(oldDate);
if (start.Hour == end.Hour && start.AddMinutes(20).Minute >= end.Minute)
The final result should display the user the time span between the start hour and the end hour.(e.g. start work at 06:30 AM and finished at 18:30 PM, the result to display should be 12 hours).
Now, I have to DateTime parameters; fromTime and toTime
Each DateTime parameter have an hour in 24 hour format, and also might have a minutes value of 30 min.
What I willing to do is to get the time span between those DateTime parameters.
For the hours I used this method:
Public TimeSpan GetHourSpan(DateTime fromTime, DateTime toTime)
{
TimeSpan fromH = TimeSpan.FromHours(fromTime.Hour);
TimeSpan toH = TimeSpan.FromHours(toTime.Hour);
TimeSpan hourTotalSpan = toH.Subtract(fromH);
return hourTotalSpan;
}
This is great, my problem is to get the time span in minutes if there is, and finally add it to the TimeSpan object to display.
If both have 30 min time span in the above way will return 0, and than I have to start check every parameter if it have a value in the min property.
Isn't there an easy way to get time span for hours and min together?
TimeSpan span = toTime - fromTime;
// Split into hours:minutes: span.Hours, span.Minutes
// Total span in hours: span.TotalHours
// Total span in minutes (hours * 60): span.TotalMinutes
If you deduct a DateTime from a DateTime, the result is a a TimeSpan. So you can simply take
TimeSpan result = toTime-fromTime;
int hours = result.Hours;
int minutes = result.Minutes;
TimeSpan span = toTime - fromTime;
public double DurationinMins(DateTime startDt, DateTime endDt)
{
var ts = endDt.Subtract(startDt);
return ts.TotalMinutes;
}