« DateTime » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 93 : | Ligne 93 : | ||
var customFormatUs = dateTimeFormatUs.ShortDatePattern; // M/d/yyyy | var customFormatUs = dateTimeFormatUs.ShortDatePattern; // M/d/yyyy | ||
</kode> | </kode> | ||
= Timezone = | |||
<kode lang='cs'> | |||
var dt = new DateTime(2024, 7, 18, 0, 0, 0); | |||
// consider the datetime as Paris datetime then convert it to UTC | |||
TimeZoneInfo.ConvertTimeToUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time")); // 2024, 7, 17, 22, 0, 0 | |||
</kode> | |||
[https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones Timezone names] | |||
= DateOnly = | = DateOnly = | ||
Ligne 98 : | Ligne 106 : | ||
DateOnly date = DateOnly.FromDateTime(DateTime.Now); | DateOnly date = DateOnly.FromDateTime(DateTime.Now); | ||
DateTime dateTime = date.ToDateTime(TimeOnly | DateTime dateTime = date.ToDateTime(new TimeOnly()); | ||
</kode> | </kode> | ||
Dernière version du 18 juillet 2024 à 14:34
DateTime et String
var formattedDate = $"{DateTime.Now:yyyy-MM-dd}"; dateTime.ToString("o"); DateTime dt = DateTime.ParseExact(dateTimeString, "o", DateTimeFormatInfo.CurrentInfo); // RoundtripKind permet de conserver la valeur de la propriété Kind lors de la convertion. Par défaut Kind est définit à Local. DateTime.Parse(stringToParse, null, DateTimeStyles.RoundtripKind); dateTimeOffset.ToString("dd MMM yyyy – HH:mm:ss:fffffff", CultureInfo.InvariantCulture); DateTimeOffset.ParseExact(stringToParse, "dd MMM yyyy - HH:mm:ss:fffffff zzz", CultureInfo.InvariantCulture); dateTimeOffset.ToString("o"); // équivalent à dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz", CultureInfo.InvariantCulture); DateTimeOffset.Parse(stringToParse); |
Formats Standard
Nom | Code | Affichage |
---|---|---|
ShortDate | d | 3/9/2008 |
LongDate | D | Sunday, March 09, 2008 |
MonthDay | m | March 09 |
YearMonth | y | March, 2008 |
ShortTime | t | 4:05 PM |
LongTime | T | 4:05:07 PM |
ShortDate+ShortTime | g | 3/9/2008 4:05 PM |
ShortDate+LongTime | G | 3/9/2008 4:05:07 PM |
LongDate+ShortTime | f | Sunday, March 09, 2008 4:05 PM |
FullDateTime | F | Sunday, March 09, 2008 4:05:07 PM |
RFC1123 | r | Sun, 09 Mar 2008 16:05:07 GMT |
SortableDateTime | s | 2008-03-09T16:05:07 |
UniversalSortableDateTime | u | 2008-03-09 16:05:07Z |
o | 2008-03-09T16:05:07.1234567+01:00 |
Formats personnalisés
d | 1 | yyyy | 2015 | |
dd | 01 | HH | 23 | |
ddd | lun. | mm | 59 | |
dddd | lundi | ss | 59 | |
M | 1 | fff | 123 | |
MM | 01 | zzz | -07:00 | |
MMM | janv. | |||
MMMM | janvier |
DateTime et Culture
Si elle n'est pas spécifiée c'est la culture courante (CultureInfo.CurrentCulture) qui est utilisée.
Si l'on utilise un format prédéfinie le résultat peut varier en fonction de la culture:
var dt = new DateTime(1984, 1, 30); dt.ToString("d", new CultureInfo("fr-FR")); // 30/01/1984 dt.ToString("d", new CultureInfo("en-US")); // 1/30/1984 |
Par contre les formats personnalisés forcent le format et ne permettent pas de variations en fonction de la culture.
De plus il n'est pas possible de combiner un format standard à un format personnalisé.
L'utilisation de DateTimeFormatInfo permet de créer un format personnalisé en fonction de la culture.
var dateTimeFormatFr = DateTimeFormatInfo.GetInstance(new CultureInfo("fr-FR")); var dateTimeFormatUs = DateTimeFormatInfo.GetInstance(new CultureInfo("en-US")); var customFormatFr = dateTimeFormatFr.ShortDatePattern; // dd/MM/yyyy var customFormatUs = dateTimeFormatUs.ShortDatePattern; // M/d/yyyy |
Timezone
var dt = new DateTime(2024, 7, 18, 0, 0, 0); // consider the datetime as Paris datetime then convert it to UTC TimeZoneInfo.ConvertTimeToUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time")); // 2024, 7, 17, 22, 0, 0 |
DateOnly
DateOnly date = DateOnly.FromDateTime(DateTime.Now); DateTime dateTime = date.ToDateTime(new TimeOnly()); |
Temps écoulé depuis 1970
var dt = DateTime.Now; long l = new DateTimeOffset(dt).ToUnixTimeMilliseconds(); |
Nécessite le Framework .NET 4.6 |
Comparison
var max = date1 > date2 ? date1 : date2; var max = new[] { date1, date2, date3 }.Max(); public static T Max<T>(T first, T second) { if (Comparer<T>.Default.Compare(first, second) > 0) return first; return second; } var max = Max(date1, date2); |
Exemples
var firstDayOfMonth = myDate.Date.AddDays(1 - myDate.Day); var firstDayOfMonth = new DateTime(myDate.Year, myDate.Month, 1); var lastDayOfMonth = myDate.AddDays(DateTime.DaysInMonth(myDate.Year, myDate.Month) - myDate.Date); var lastDayOfMonth = new DateTime(myDate.Year, myDate.Month, DateTime.DaysInMonth(myDate.Year, myDate.Month)); |