DateTime vs ^DateTime

DateTime (without caret) is the way to go and makes life easier for comparison operations etc.

DateTime is a value type so should always be used without the ^. When you use the caret then you get a boxed value that can't be serialized etc.

Using DateTime


	DateTime DateTimeNow;
	DateTimeNow = DateTime::Now;

	//or
	DateTimeNow = DateTime(0);

	MyString = DateTimeNow.Year + DateTimeNow.Month + DateTimeNow.Day;

	//or
	MyString = String::Format("{0:D2}", DateTimeNow.Year);

	//or
	MyString = String::Format("{0:G}", DateTimeNow);

	array ^MyDateTimes;

Using ^DateTime


	DateTime ^DateTimeNow = gcnew DateTime;
	DateTimeNow = DateTime::Now;

	MyString = DateTimeNow->Year + DateTimeNow->Month + DateTimeNow->Day;

	//or
	MyString = String::Format("{0:D2}", DateTimeNow->Year);

	//or
	MyString = String::Format("{0:G}", DateTimeNow);

	//When you want to convert to DateTime to pass a value or to use DateTime methods
	Convert::ToDateTime(MyDateTime)

Comparing


	if (MyDateTime1 >= MyDateTime2)

	//Compare by date element only (ignore time)
	if (MyDateTime1.Date >= MyDateTime2.Date)

Adjusting


	MyDateTime2 = MyDateTime1 + TimeSpan(0, 0, 1)

Adding the current time and date to a string


	txtHistory->Text = "(" + DateTime::Now + ")";

Adding Values From Strings

The date and time fields are all int values but they are read only. I think you can only write an entire date time object to a DateTime object, like this:


	System::DateTime moment = System::DateTime(1999, 1, 13, 3, 57, 32, 11);
	//Year, Month, Day, Hour, Minute, Second, Millisecond (overloaded - don't have to include all of these)

	System::DateTime dateTime =
	   System::DateTime( 1979,      // Year
                     7,        // Month
                     28,        // Day
                     22,        // Hour
                     35,        // Minute
                     5,         // Second
                     15        // Millisecond
                     );

Convert To Universal Time Format String

Converting a DateTime to this format allows you to avoid local date time format issues when passing DateTime values between systems. Then just use Convert::ToDateTime to convert it back.


	String ^sTemp = MyDateTimeValue->ToString("yyyy-MM-ddTHH:mm:ss.fffffff");

UTC


	DateTime ^TimeNow = DateTime();
	TimeNow = DateTime::Now;
	TimeNow = TimeNow->ToUniversalTime();

Values


DayOfWeek		DayOfWeek::Thursday

Problems With Array<DateTime^> Object not being accepted


//Using this to force the DateTime to be converted from ^ to a standard DateTime:
	Convert::ToDateTime(
//is the trick to use when you get the compiler refusign to accept a perfectly valid line!

Format

Link to all format codes


	MyString = String::Format("{0:dd/MM/yyyy HH:mm:ss}", MyDateTime);


	DateTime ^thisDate = DateTime::Now;
	// Store the output of the String::Format method in a string.
	String ^resultString = "";
	Console::Clear();

    // Format a negative integer or floating-point number in
    // various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    resultString = String::Format(CultureInfo::CurrentCulture,
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);
    Console::WriteLine(resultString);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    resultString = String::Format(CultureInfo::CurrentCulture,
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);
    Console::WriteLine(resultString);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    resultString = String::Format(CultureInfo::CurrentCulture,
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);
    Console::WriteLine(resultString);
};
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/
USEFUL?
We benefit hugely from resources on the web so we decided we should try and give back some of our knowledge and resources to the community by opening up many of our company’s internal notes and libraries through mini sites like this. We hope you find the site helpful.
Please feel free to comment if you can add help to this page or point out issues and solutions you have found, but please note that we do not provide support on this site. If you need help with a problem please use one of the many online forums.