简体   繁体   中英

.NET convert Datetime to format Sortable date/time pattern (“s”);

Im working with VS2008, .NET and C#, and I need to send to one of our clients a DATETIME variable.

The problem is that they want the Date in the format Sortable date/time pattern ("s").

When I get the actual datetime, it is a Datetime object. When I format it to the given format is now a String object, and it has the format I want. But after that I can't create a Datetime object from that formatted String with the same format, because it always returns it to the original Datetime format.

More specific:

DateTime currTime = System.DateTime.Now; //(the format is "13/08/2010 09:33:57 a.m.")

String date = String.Format("{0:s}", currTime);// (wanted format "2010-08-13T09:33:57")

DateTime newDate = DateTime.Parse(date);// (original format again "13/08/2010 09:33:57 a.m.")

IFormatProvider culture = new System.Globalization.CultureInfo("", true); //(Invariant Culture)
String format = "s";                        
DateTime fecha = DateTime.ParseExact(date, format, culture); // (original format again "13/08/2010 09:33:57 a.m.")

Is there a way of getting a Datetime object with the desired format, or Datetime objects use a given format, and you can't format them to the equivalent string formats?

Thx

A DateTime is just a number. It has no intrinsic "format". It is only rendered into a format when converted to a string. Hence, whenever you need a DateTime as a string, you have to specify what format you want it in.

String date = String.Format("{0:s}", currTime);

This can be shorted a bit to :

String date = currTime.ToString("s");

If I understand the question correctly, I think you are getting confused. A DateTime object itself is not formattable, it is essentialy just a numeric value (number of ticks since DateTime.MinValue or whatever it is).

You can convert a DateTime object into a string representation in whatever format you like, but you aren't changing the actual DateTime object.

Every time you use a DateTime value in a place where it needs to be turned into a string (eg in string.Format() ), C# will generally call the .ToString() method. The DateTime type declares a .ToString() method that has the format you don't want.

However, DateTime has additional methods, including .ToString(IFormatProvider provider) and .ToString(string format) .

Therefore, you can probably achieve what you want if you replace every use of a DateTime variable in the relevant string-like context to one that calls the appropriate .ToString overload, for example:

Instead of

var message = string.Format("The parcel was sent on {0}.", currTime);

use

var message = string.Format("The parcel was sent on {0}.", currTime.ToString("s"));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM