Date month and year calculation [duplicate] - c#

This question already has answers here:
How do I get the time difference between two DateTime objects using C#?
(9 answers)
Closed 7 years ago.
I have two dates of the form:
Start Date: 2007-03-24
End Date: 2009-06-26
Now I need to find the difference between these two in the following form:
2 years, 3 months and 2 days
How can I do this in c# windows form?

You need to use TimeSpan to get difference..
class Program
{
static void Main(string[] args)
{
string StartDate = "2007-03-24";
string EndDate = "2009-06-26";
System.DateTime firstDate = DateTime.ParseExact(StartDate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
System.DateTime secondDate = DateTime.ParseExact(EndDate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
System.TimeSpan diff = secondDate.Subtract(firstDate);
var totalDays = (diff).TotalDays;
var totalYears = Math.Truncate(totalDays / 365);
var totalMonths = Math.Truncate((totalDays % 365) / 30);
var remainingDays = Math.Truncate((totalDays % 365) % 30);
Console.WriteLine("Estimated duration is {0} year(s), {1} month(s) and {2} day(s)", totalYears, totalMonths, remainingDays);
Console.ReadLine();
}
}

.net already provide TimeSpan class to show differences between two datetime value.some properties of TimeSpan class show years,month and day interval seperately

Related

Format a date using a specific format [duplicate]

This question already has answers here:
Format date in C#
(7 answers)
How to format a date in C# by example?
(5 answers)
Closed 1 year ago.
I have 31 juli 2021 (norwegian date formatting), and adding 14 days to it, which gives me 14.08.2021.
I would like for the return date to be in the same format: 14 august 2021.
This is my current code:
int yearInt = Convert.ToInt32(year);
int monthInt = Convert.ToInt32(month);
int lastDayOfMonth = DateTime.DaysInMonth(yearInt, monthInt);
DateTime today = DateTime.Now;
DateTime invoiceDate = new(yearInt, monthInt, lastDayOfMonth);
DateTime invoiceDatePlus14 = invoiceDate.AddDays(14);
string rsvpBy_monthIsInt = invoiceDayPlus14.ToShortDateString();
I know how to get the month name off of the its corresponding int value:
static string getMonthName(int month) {
return CultureInfo.CreateSpecificCulture("no").DateTimeFormat.GetMonthName(month);
}
But how can I do the same to monthInt without re-factoring my whole approach?
If I need to - I need to, if so, how could I?
You may want to try this:
string rsvpBy_monthIsInt = invoiceDayPlus14.ToString("dd MMMM yyyy");

How to convert between TimeSpan and DateTime [duplicate]

This question already has answers here:
Adding a TimeSpan to a given DateTime
(8 answers)
Closed 3 years ago.
A bit silly question, but I find myself not sure how to answer it.
Timespan ts = (DateTime1 - DateTime2).TotalMinutes
Suppose I know ts and DateTime2, how can I find DateTime1?
You can add a TimeSpan to a date
TimeSpan ts = DateTime1 - DateTime2;
DateTime1 = DateTime2 + ts;
Note that I removed the TotalMinutes, because it returns a double, not a TimeSpan.
If you want to work with minutes, you can write
double minutes = (DateTime1 - DateTime2).TotalMinutes;
DateTime1 = DateTime2 + TimeSpan.FromMinutes(minutes);
Note that the minutes contain the seconds and fractions of seconds as decimals. If you only need the full minutes, you can get them with:
int fullMinutes = (int)Math.Floor(minutes);
Your code does not compile.
Example:
DateTime DateTime1 = DateTime.Now;
DateTime DateTime2 = DateTime1.AddMinutes(-10);
var ts = (DateTime1 - DateTime2).TotalMinutes; // ts is a double
DateTime DateTime3 = DateTime1 + TimeSpan.FromMinutes(ts);

C# - UTC automatically convert to 12h system [duplicate]

This question already has answers here:
DateTime.Value.ToString(format) gives me 12 hour clock
(4 answers)
Closed 6 years ago.
I'm working with a project and one of its functional requirement is to create a datetime range in which I will select a set of data based on that.
This range should take today's datetime starting from 8:00:00 to 18:00:00, and then I want to convert the format to be yyyy-MM-ddThh:mm:ssZ, so I'm doing the following to approach that:
DateTime fromTime = DateTime.Now;
TimeSpan ts = new TimeSpan(8,0,0);
fromTime = fromTime.Date + ts;
string fromTimeFormat = fromTime.ToString("yyyy-MM-ddThh:mm:ssZ");
DateTime toTime = DateTime.Now;
TimeSpan tss = new TimeSpan(18, 0, 0);
toTime = toTime.Date + tss;
string toTimeFormat = toTime.ToString("yyyy-MM-ddThh:mm:ssZ");
The problem is that, the toTimeFormat is being converted to the 12h system, so when I use it later it's being considered as 6:00 AM.
Any ideas please?
Because you are using hh specifier which is for 12-hour clock format.
You need to use HH specifier which is for 24-hour clock format.
string toTimeFormat = toTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
And you can simplify your code as;
string fromTimeFormat = DateTime.Today.AddHours(6).ToString("yyyy-MM-ddThh:mm:ssZ");
string toTimeFormat = DateTime.Today.AddHours(18).ToString("yyyy-MM-ddTHH:mm:ssZ");

how to combine date and time in c# [duplicate]

This question already has answers here:
Combine two datetime variables into one (up to seconds precision)
(4 answers)
Closed 9 years ago.
I have 2 values:
var dt1 = dtFromDate.Value;
var tm1 = tmFromTime.Value;
dt1 = 12/5/2013 12:00:00 AM
tm1 = 11/5/2013 9:00:00 AM
i want to make datetime as : 12/5/2013 9:00:00 AM
how can it be possible?
You can take the date part of dt1 by accessing Date, the time part of tm1 by accessing TimeOfDay and then combine them using +:
dt1.Date + tm1.TimeOfDay
You can create a new DateTime using overloaded constructor:
DateTime dt = new DateTime(
dt1.Year,
dt1.Month,
dt1.Day,
tm1.Hour,
tm2.Minute,
tm2.Second,
tm2.Millisecond);
You can use that code, using Date property to get just date part and Time property to get just time part:
var dt1 = DateTime.Parse("12/5/2013 12:00:00 AM"); // this is just a sample date
var tm1 = DateTime.Parse("11/5/2013 9:00:00 AM"); // this is just a sample date
var newDate = dt1.Date.Add(tm1.TimeOfDay); // the code to use
DateTime object is immutable so in order to get the date from one DateTime object, but the time from another - you must create new DateTime object.
There is two ways for doing it:
Create new DateTime with constructor overload:
DateTime date1 =
new DateTime(dt1.Year, dt1.Month, dt1.Day, tm1.Hour, tm1.Minute, tm1.Second);
Parse string to DateTime:
var dateToParse =
String.Concat(dt1.ToString("yyyy.MM.dd ", CultureInfo.InvariantCulture),
tm1.ToString("HH:mm:ss", CultureInfo.InvariantCulture));
var date1 =
DateTime.ParseExact(dateToParse, "yyyy.MM.dd HH:mm:ss", CultureInfo.InvariantCulture);

Adding a number to the day or month or year in a date [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
How to add days to a date in Java
Consider the date to be 19/05/2013 and the number to be 14. I would like to get the resulting date after adding the number to the month.
Expected result is: 19/07/2014.
In .NET you could do use the AddMonths method:
DateTime date = new DateTime(2013, 5, 19);
DateTime newDate = date.AddMonths(14);
As far as parsing a date from a string using a specified format you could use the TryParseExact method:
string dateStr = "19/05/2013";
DateTime date;
if (DateTime.TryParseExact(dateStr, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
// successfully parsed the string into a DateTime instance =>
// here we could add the desired number of months to it and construct
// a new DateTime
DateTime newDate = date.AddMonths(14);
}
else
{
// parsing failed => the specified string was not in the correct format
// you could inform the user about that here
}
You can DateTime.AddMonths to add months.
DateTime date = new DateTime(2013, 5, 19);
DateTime newDate = date.AddMonths(14);
In Java:
Calendar c = Calendar.getInstance();
c.setTime(new Date()); // today is the default
c.add(Calendar.DATE, 1); // number of days to add (1)
c.getTime(); // The new date
Just use AddMonths to add the specified number of months to the value of this instance.
DateTime date = new DateTime(2013, 5, 19); // (yyyy,MM,dd)
DateTime dt = date.AddMonths(14);

Categories