I am currently using NodaTime to parse dates and output dates
public static string nodaTimeTest6(string input)
{
var defaultValue = new OffsetDateTime(new LocalDateTime(2000, 1, 1, 0, 0), Offset.Zero);
var pattern = OffsetDateTimePattern.Create("yyyy-MM-dd'T'HH:mm:sso<m>", CultureInfo.InvariantCulture, defaultValue);
var result = pattern.Parse(input);
return result.Value.Month + "/" + result.Value.Day + "/" + result.Value.Year + " " + result.Value.ClockHourOfHalfDay;
}
The input, for example, is this: 2014-03-11T02:00:00-07:00
If my return
statement is the following: return result.Value.ToString()
, then the output would look like this: 2014-03-11T02:00:00-07
I understand the use of properties with NodaTime (which is a life saver), however, I am interested in outputs like this:
yyyy-MM-dd HH:mm:ss
yyyyMMdd HH:mm:ss
dd/MM/yyyy hh:mm
So I tried to change my return
statement to this:
return result.Value.Month + "/" + result.Value.Day + "/" + result.Value.Year + " " + result.Value.Hour + ":" + result.Value.Minute;
The final output of that format is: 3/11/2014 2:0
Is there anyway to craft the output so it's a fixed format like 03/11/2014 02:00
I know that if I input an 01
as my month, the output would be 1/11/2014
instead of 01/11/2014
You can send the format to the ToString
method:
return result.Value.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
As ANeves mentions, you can use the BCL-style formatting using ToString(pattern, IFormatProvider)
, but it's also worth noting that all pattern objects already support a Format(value)
method in addition to Parse(string)
, so you could also write:
var displayPattern = OffsetDateTimePattern.Create("MM/dd/yyyy' 'HH:mm", CultureInfo.InvariantCulture, defaultValue);
return displayPattern.Format(result.Value);
Which is perhaps more consistent with using patterns for parsing, and also happens to be more efficient if you can keep hold of the pattern and use it more than once.
The Noda Time user guide has a section on Text handling that covers this in more detail.
Not directly related to your question, but: if you're formatting an OffsetDateTime
for display without including the offset, you'd normally want to convert it to a LocalDateTime
(perhaps with a fixed-offset time zone) to ensure that the results are comparable. As it stands, you'll return the same string for inputs of 2014-03-11T02:00:00-07:00
and also e.g. 2014-03-11T02:00:00-08:00
. Perhaps that's okay for your use case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With