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

*/
Feel free to comment if you can add help to this page or point out issues and solutions you have found. I do not provide support on this site, if you need help with a problem head over to stack overflow.

Comments

Your email address will not be published.