Data Time Format(Duration) - c#

I have a query like i want to show the time information in custom format like(1min 06sec) from date .I have a filed Duration in database and when i am binding my data control then in item i want to display in above format(1min 06 sec),so is it possible?

Checkout this documentation - http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
But, assuming you have a DateTime object, something like this should do the trick:
var test1 = DateTime.UtcNow.ToString("m'min 's'sec'");
Or for a TimeSpan:
var test2 = TimeSpan.FromSeconds(123).ToString("m'min 's'sec'");
You can easily add in hours/days/etc. depending on the exact format you want. If your object isn't a DateTime or TimeSpan object, you will have to do something custom.

You can use System.TimeSpan structure. It represents time interval.
MSDN

Given you DateTime variable, you could do the following:
var rr = dt1.ToString("mm'min 'ss'sec'");
Or if you have a TimeSpan:
You'll need to use a TimeSpan for this. A simplistic approach is the following:
var ts = new TimeSpan(0, 2, 30);
var result = ts.Minutes.ToString() + "min " + ts.Seconds.ToString() + "sec";
In this example, I've set the TimeSpan variable to 2 minutes and 30 seconds.
Or if you have two dates:
If you have two dates you can do a diff and get the timespan and from there use the code I've shown above:
var dt1 = new DateTime(2011, 01, 01, 12, 01, 00);
var dt2 = new DateTime(2011, 01, 01, 12, 03, 30);
var diffTimeSpan = dt2.Subtract(dt1);
var r = diffTimeSpan.Minutes.ToString() + "min " + diffTimeSpan.Seconds.ToString() + "sec";

Related

Get closest day in future in a LINQ expression

I have date list in yyyy/mm/dd:
2020/06/10
2020/06/18
2020/07/17
and given date
2020/06/10
I want to find closest day in future from the given date in LINQ (expected result: 2020/06/18).
If you mean to find the closest date in future then you can filter out all earlier dates (including the same date), order it and then take the first value:
List<DateTime> allDates = new List<System.DateTime>()
{
new DateTime(2020, 06, 10),
new DateTime(2020, 06, 18),
new DateTime(2020, 07, 17),
};
DateTime givenDate = new DateTime(2020, 06, 10);
DateTime closestDateInFuture = allDates.Where(x => x > givenDate).OrderBy(x=> x).First();
Console.WriteLine(closestDateInFuture);
Output:
18.06.2020 00:00:00
Another suggestion by #Johnathan Barclay is to use the Min method, which yields the same result:
DateTime closestDateInFuture = allDates.Where(x => x > givenDate).Min()

how to remove date from datetime in Linq c#

i want to get only time from a datetime variable in linq query.
for eaxample if i have an array of datetime having values
["02/12/1970 14:52:06","14/06/2015 12:32:44"]
then how to extract minimum time from it so that i get output like
"12:32:44"
as if i take minimum these two it will give output
"14:52:44" instead of "12:32:44"
as the datepart of first value is smaller than the other.
i try this code:
time1 = table1.Min(x=>x.StartTime)
but it will give "14:52:06" as output
any suggestions?
First extract Time from DateTime and then get Min value
var dates = new List<DateTime>
{
new DateTime(2020, 6, 9, 12, 35, 45),
new DateTime(2020, 6, 10, 11, 35, 45)
};
var minTime = dates
.Select(d => d.TimeOfDay)
.Min();
#Update
If you want to get DateTime object that has the smallest time part, then use this:
var dateWithMinTime = dates
.OrderBy(d => d.TimeOfDay)
.FirstOrDefault();
Try
table1.Min(c => c.StartTime.TimeOfDay)
assuming StarTime is a DateTime.

Difference between two times C# [duplicate]

How do I get the time difference between two DateTime objects using C#?
The following example demonstrates how to do this:
DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);
When executed this prints "30" since there is a 30 minute difference between the date/times.
The result of DateTime.Subtract(DateTime x) is a TimeSpan Object which gives other useful properties.
You want the TimeSpan struct:
TimeSpan diff = dateTime1 - dateTime2;
A TimeSpan object represents a time interval (duration of time or elapsed time) that is measured as a positive or negative number of days, hours, minutes, seconds, and fractions of a second. The TimeSpan structure can also be used to represent the time of day, but only if the time is unrelated to a particular date.
There are various methods for getting the days, hours, minutes, seconds and milliseconds back from this structure.
If you are just interested in the difference then:
TimeSpan diff = (dateTime1 - dateTime2)).Duration();
will give you the positive difference between the times regardless of the order.
If you have just got the time component but the times could be split by midnight then you need to add 24 hours to the span to get the actual difference:
TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
diff = diff + TimeSpan.FromDays(1);
}
What you need is to use the DateTime classs Subtract method, which returns a TimeSpan.
var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));
The way I usually do it is subtracting the two DateTime and this gets me a TimeSpan that will tell me the diff.
Here's an example:
DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
IF they are both UTC date-time values you can do TimeSpan diff = dateTime1 - dateTime2;
Otherwise your chance of getting the correct answer in every single possible case is zero.
var startDate = new DateTime(2007, 3, 24);
var endDate = new DateTime(2009, 6, 26);
var dateDiff = endDate.Subtract(startDate);
var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365,
(int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);
Console.WriteLine(date);
private void button1_Click(object sender, EventArgs e)
{
TimeSpan timespan;
timespan = dateTimePicker2.Value - dateTimePicker1.Value;
int timeDifference = timespan.Days;
MessageBox.Show(timeDifference.ToString());
}
You can use in following manner to achieve difference between two Datetime Object. Suppose there are DateTime objects dt1 and dt2 then the code.
TimeSpan diff = dt2.Subtract(dt1);
You need to use a TimeSpan. Here is some sample code:
TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

Display Date time in UK and US

Update
I want to display a date time value in 24 hour format for either UK or US depending on its current culture, using generic way.
The code is below (NOT the actual code, it is for the question only):
var dt = new DateTime(2011, 4, 15, 17, 50, 40);
Console.WriteLine(dt.ToString("d", new CultureInfo("en-us")) + " "
+ dt.ToString("H:mm:ss", new CultureInfo("en-us")));
Console.WriteLine(dt.ToString("G", new CultureInfo("en-gb")));
Result below:
4/15/2011 17:50:40
15/04/2011 17:50:40
It displays ok.
Is there a better way to display the time without using "H:mm:ss". Please note that The G for US display PM, which is not what I want.
The month is 4 for US, rather than 04, is there a way to display it in 04.
.
Update
Below is what I want, ideally using generic way:
US: 04/15/2011 17:50:40
UK: 15/04/2011 17:50:40
Try this.
DateTime dt = new DateTime(2011, 4, 15, 17, 50, 40);
Console.WriteLine(dt.ToString("MM/dd/yyy H:mm:ss"));// US format
Console.WriteLine(dt.ToString("dd/MM/yyy H:mm:ss"));// UK format
Custom Date and Time Format Strings from MSDN
You can write your own custom display like this,
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString(#"MM/dd/yy HH\:mm\:ss"));
Console.ReadLine();
// Displays 05/20/12 17:08:37
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
You can do something like this for US:
CultureInfo ci = new CultureInfo("en-us", true);
ci.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";
ci.DateTimeFormat.LongTimePattern = "HH:mm:ss";
ci.DateTimeFormat.AMDesignator = "";
ci.DateTimeFormat.PMDesignator = "";
Now you can either set the current thread culture like this:
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
And display the date like this:
Console.WriteLine(dt.ToString("G"));
Or you can pass the culture as a parameter to the ToString method like this:
Console.WriteLine(dt.ToString("G", ci));
If you prefer the second method you can wrap the code above in a static method so you can call it like this:
Console.WriteLine(dt.ToString("G", Cultures.EnUs));

DateTimeOffset proper usage

If I have a DateTime instance which represents a valid UTC time, and an offset that converts that DateTime to the time zone where it applies, how do I construct a DateTimeOffset instance to represent this?
var utcDateTime = new DateTime(2011, 02, 29, 12, 43, 0, /*DateTimeKind.Utc*/);
var localOffset = TimeSpan.FromHours(2.0);
var dto = ...
// Here the properties should be as follows;
// dto.UtcDateTime = 2011-02-29 12:43:00
// dto.LocalDateTime = 2011-02-29 14:43:00
Perhaps I'm not understanding the DateTimeOffset structure correctly, but I'm unable to get the expected output.
Thanks in advance
Looks like you want:
var utcDateTime = new DateTime(2012, 02, 29, 12, 43, 0, DateTimeKind.Utc);
var dto = new DateTimeOffset(utcDateTime).ToOffset(TimeSpan.FromHours(2));
Note that I changed the year from 2011 (which is not a leap year and does not have 29 days in February) to 2012.
Test:
Console.WriteLine("Utc = {0}, Original = {1}", dto.UtcDateTime, dto.DateTime);
Output:
Utc = 2/29/2012 12:43:00 PM, Original = 2/29/2012 2:43:00 PM
Do note that you probably don't want the LocalDateTime property, which may represent the instant in time as of the local system's timezone.

Categories

Resources