If you ever have the need to represent a date/time (or part of a date/time) as a string for programmatic rather than human consumption (e.g. you are defining a save file format or a network protocol), please use ISO 8601 unless you have a very strong reason not to.
For more information, please read what the W3C has to say about ISO 8601 style date and time formats.
While Windows supports dozens or even hundreds of languages, its localization APIs require quite a bit of getting used to. Below is how I solved some common problems related to formatting and parsing a number for a specific locale.
Formatting a Number for a Locale The function GetNumberFormat() formats a number for a particular locale. Its simplest usage looks something like:
1 2 3 4 5 6 7 8 9 10 11 12 13 #define ARRAYSIZE(x) ( sizeof(x) / sizeof(x) ) TCHAR buf; int ret = GetNumberFormat ( LOCALE_USER_DEFAULT, // locale 0, // dwFlags TEXT("1234567.