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

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");

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 strings to DateTime C# [duplicate]

This question already has answers here:
Parse string to DateTime in C#
(9 answers)
Closed 7 years ago.
I have 3 separate strings with the following format:
01-29-2016: a date, picked from a bootstrap datepicker
1:00am start time, picked from a dropdown, format could also be e.g. 10:00pm
2:30am end time, picked from a dropdown, format could also be e.g. 11:30pm
Using the above strings I need to construct 2 DateTime properties that represent the time range, something like below:
2016-01-29 02:30:00
2016-01-29 01:00:00
I need the DateTime properties so I could update datetime database fields
You can combine both your time parts with date part respectively and use ParseExact method with MM-dd-yyyyH:mmtt format like;
var date = "01-29-2016";
var ts1 = "1:00am";
var ts2 = "2:30am";
var dt1 = DateTime.ParseExact(date + ts1, "MM-dd-yyyyH:mmtt", CultureInfo.InvariantCulture);
// 29.01.2016 01:00:00
var dt2 = DateTime.ParseExact(date + ts2, "MM-dd-yyyyH:mmtt", CultureInfo.InvariantCulture);
// 29.01.2016 02:30:00

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);

extract the date part from DateTime in C# [duplicate]

This question already has answers here:
How to remove time portion of date in C# in DateTime object only?
(43 answers)
Closed 9 years ago.
The line of code DateTime d = DateTime.Today; results in 10/12/2011 12:00:00 AM. How can I get only the date part.I need to ignore the time part when I compare two dates.
DateTime is a DataType which is used to store both Date and Time. But it provides Properties to get the Date Part.
You can get the Date part from Date Property.
http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx
DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());
// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));
// The example displays the following output to the console:
// 6/1/2008 7:47:00 AM
// 6/1/2008
// 6/1/2008 12:00 AM
// 06/01/2008 00:00
There is no way to "discard" the time component.
DateTime.Today is the same as:
DateTime d = DateTime.Now.Date;
If you only want to display only the date portion, simply do that - use ToString with the format string you need.
For example, using the standard format string "D" (long date format specifier):
d.ToString("D");
When comparing only the date of the datatimes, use the Date property. So this should work fine for you
datetime1.Date == datetime2.Date
DateTime d = DateTime.Today.Date;
Console.WriteLine(d.ToShortDateString()); // outputs just date
if you want to compare dates, ignoring the time part, make an use of DateTime.Year and DateTime.DayOfYear properties.
code snippet
DateTime d1 = DateTime.Today;
DateTime d2 = DateTime.Today.AddDays(3);
if (d1.Year < d2.Year)
Console.WriteLine("d1 < d2");
else
if (d1.DayOfYear < d2.DayOfYear)
Console.WriteLine("d1 < d2");
you can use a formatstring
DateTime time = DateTime.Now;
String format = "MMM ddd d HH:mm yyyy";
Console.WriteLine(time.ToString(format));

How to set only time part of a DateTime variable in C# [duplicate]

This question already has answers here:
How to change time in DateTime?
(29 answers)
Closed 9 years ago.
I have a DateTime variable:
DateTime date = DateTime.Now;
I want to change the time part of a DateTime variable. But when I tried to access time part (hh:mm:ss) these fields are readonly.
Can't I set these properties?
Use the constructor that allows you to specify the year, month, day, hours, minutes, and seconds:
var dateNow = DateTime.Now;
var date = new DateTime(dateNow.Year, dateNow.Month, dateNow.Day, 4, 5, 6);
you can't change the DateTime object, it's immutable. However, you can set it to a new value, for example:
var newDate = oldDate.Date + new TimeSpan(11, 30, 55);
date = new DateTime(date.year, date.month, date.day, HH, MM, SS);
I'm not sure exactly what you're trying to do but
you can set the date/time to exactly what you want in a number of ways...
You can specify 12/25/2010 4:58 PM by using
DateTime myDate = Convert.ToDateTime("2010-12-25 16:58:00");
OR if you have an existing datetime construct , say 12/25/2010 (and any random time) and you want to set it to 12/25/2010 4:58 PM, you could do so like this:
DateTime myDate = ExistingTime.Date.AddHours(16).AddMinutes(58);
The ExistingTime.Date will be 12/25 at midnight, and you just add hours and minutes to get it to the time you want.
It isn't possible as DateTime is immutable. The same discussion is available here: How to change time in datetime?

Categories