Conversion d’heures entre fuseaux horairesConverting times between time zones

Il devient de plus en plus important pour une application qui fonctionne avec des dates et des heures de gérer les différences entre les fuseaux horaires.It is becoming increasingly important for any application that works with dates and times to handle differences between time zones. Une application ne peut plus supposer que toutes les heures peuvent être exprimées dans l’heure locale, qui est l’heure disponible à partir de la structure DateTime.An application can no longer assume that all times can be expressed in the local time, which is the time available from the DateTime structure. Par exemple, une page web qui affiche l’heure actuelle dans la partie Est des États-Unis ne sera pas crédible pour un client d’Asie orientale.For example, a Web page that displays the current time in the eastern part of the United States will lack credibility to a customer in eastern Asia. Cette rubrique explique comment convertir des heures d’un fuseau horaire vers un autre, et comment convertir des valeurs de DateTimeOffset qui ont une prise en forme limitée des fuseaux horaires.This topic explains how to convert times from one time zone to another, as well as how to convert DateTimeOffset values that have limited time zone awareness.

Conversion en heure UTCConverting to Coordinated Universal Time

Le temps universel coordonné (UTC) est une norme d’heure atomique de haute précision.Coordinated Universal Time (UTC) is a high-precision, atomic time standard. Les fuseaux horaires du monde sont exprimés comme décalages positifs ou négatifs par rapport à l’heure UTC.The world’s time zones are expressed as positive or negative offsets from UTC. Par conséquent, l’heure UTC fournit une sorte d’heure neutre du point de vue des fuseaux horaires.Thus, UTC provides a kind of time-zone free or time-zone neutral time. L’utilisation de l’heure UTC est recommandée lorsque la portabilité de la date et de l’heure entre les ordinateurs est importante.The use of UTC time is recommended when a date and time's portability across computers is important. (Pour plus d’informations et pour connaître les meilleures pratiques utilisant des dates et des heures, consultez codage des meilleures pratiques à l’aide de DateTime dans le .NET Framework.) La conversion de fuseaux horaires individuels en heure UTC facilite les comparaisons temporelles.(For details and other best practices using dates and times, see Coding best practices using DateTime in the .NET Framework.) Converting individual time zones to UTC makes time comparisons easy.

Notes

Vous pouvez également sérialiser une structure DateTimeOffset pour représenter de façon non ambiguë un point unique dans le temps.You can also serialize a DateTimeOffset structure to unambiguously represent a single point in time. Étant donné que les objets DateTimeOffset stockent une valeur de date et d’heure avec son décalage par rapport à l’heure UTC, ils représentent toujours un point particulier dans le temps par rapport à l’heure UTC.Because DateTimeOffset objects store a date and time value along with its offset from UTC, they always represent a particular point in time in relationship to UTC.

Le moyen le plus simple de convertir une heure en heure UTC consiste à appeler la méthode de TimeZoneInfo.ConvertTimeToUtc(DateTime) static (Shared dans Visual Basic).The easiest way to convert a time to UTC is to call the static (Shared in Visual Basic) TimeZoneInfo.ConvertTimeToUtc(DateTime) method. La conversion exacte effectuée par la méthode dépend de la valeur de la propriété Kind du paramètre dateTime, comme le montre le tableau suivant.The exact conversion performed by the method depends on the value of the dateTime parameter's Kind property, as the following table shows.

DateTime.Kind ConversionConversion
DateTimeKind.Local Convertit l’heure locale en heure UTC.Converts local time to UTC.
DateTimeKind.Unspecified Suppose que le paramètre dateTime est l’heure locale et convertit l’heure locale en heure UTC.Assumes the dateTime parameter is local time and converts local time to UTC.
DateTimeKind.Utc Retourne le paramètre dateTime inchangé.Returns the dateTime parameter unchanged.

Le code suivant convertit l’heure locale actuelle en heure UTC et affiche le résultat dans la console.The following code converts the current local time to UTC and displays the result to the console.

DateTime dateNow = DateTime.Now;
Console.WriteLine("The date and time are {0} UTC.", 
                   TimeZoneInfo.ConvertTimeToUtc(dateNow));
Dim dateNow As Date = Date.Now      
Console.WriteLine("The date and time are {0} UTC.", _
                  TimeZoneInfo.ConvertTimeToUtc(dateNow))

Si la valeur de date et d’heure ne représente ni l’heure locale ni l’heure UTC, la méthode ToUniversalTime retournera probablement un résultat erroné.If the date and time value does not represent either the local time or UTC, the ToUniversalTime method will likely return an erroneous result. Toutefois, vous pouvez utiliser la méthode TimeZoneInfo.ConvertTimeToUtc pour convertir la date et l’heure d’un fuseau horaire spécifié.However, you can use the TimeZoneInfo.ConvertTimeToUtc method to convert the date and time from a specified time zone. (Pour plus d’informations sur la récupération d’un objet TimeZoneInfo qui représente le fuseau horaire de destination, consultez recherche des fuseaux horaires définis sur un système local.) Le code suivant utilise la méthode TimeZoneInfo.ConvertTimeToUtc pour convertir l’heure de l’est en heure UTC.(For details on retrieving a TimeZoneInfo object that represents the destination time zone, see Finding the time zones defined on a local system.) The following code uses the TimeZoneInfo.ConvertTimeToUtc method to convert Eastern Standard Time to UTC.

DateTime easternTime = new DateTime(2007, 01, 02, 12, 16, 00);
string easternZoneId = "Eastern Standard Time";
try
{
   TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId);
   Console.WriteLine("The date and time are {0} UTC.", 
                     TimeZoneInfo.ConvertTimeToUtc(easternTime, easternZone));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to find the {0} zone in the registry.", 
                     easternZoneId);
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the {0} zone has been corrupted.", 
                     easternZoneId);
}
Dim easternTime As New Date(2007, 01, 02, 12, 16, 00)
Dim easternZoneId As String = "Eastern Standard Time"
Try
   Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId)
   Console.WriteLine("The date and time are {0} UTC.", _ 
                     TimeZoneInfo.ConvertTimeToUtc(easternTime, easternZone))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("Unable to find the {0} zone in the registry.", _
                     easternZoneId)
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the {0} zone has been corrupted.", _ 
                     easternZoneId)
End Try                           

Notez que cette méthode lève une ArgumentException si la propriété Kind de l’objet DateTime et le fuseau horaire ne correspondent pas.Note that this method throws an ArgumentException if the DateTime object's Kind property and the time zone are mismatched. Une incompatibilité se produit si la propriété Kind est DateTimeKind.Local mais que l’objet TimeZoneInfo ne représente pas le fuseau horaire local, ou si la propriété Kind est DateTimeKind.Utc, mais que l’objet TimeZoneInfo n’est pas égal à TimeZoneInfo.Utc.A mismatch occurs if the Kind property is DateTimeKind.Local but the TimeZoneInfo object does not represent the local time zone, or if the Kind property is DateTimeKind.Utc but the TimeZoneInfo object does not equal TimeZoneInfo.Utc.

Toutes ces méthodes prennent DateTime valeurs en tant que paramètres et retournent une valeur de DateTime.All of these methods take DateTime values as parameters and return a DateTime value. Pour les valeurs DateTimeOffset, la structure DateTimeOffset a une méthode d’instance ToUniversalTime qui convertit la date et l’heure de l’instance actuelle en heure UTC.For DateTimeOffset values, the DateTimeOffset structure has a ToUniversalTime instance method that converts the date and time of the current instance to UTC. L’exemple suivant appelle la méthode ToUniversalTime pour convertir une heure locale et plusieurs autres heures en temps universel coordonné (UTC, Universal Time Coordinated).The following example calls the ToUniversalTime method to convert a local time and several other times to Coordinated Universal Time (UTC).

DateTimeOffset localTime, otherTime, universalTime;
 
// Define local time in local time zone
localTime = new DateTimeOffset(new DateTime(2007, 6, 15, 12, 0, 0));
Console.WriteLine("Local time: {0}", localTime);
Console.WriteLine();

// Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero);
Console.WriteLine("Other time: {0}", otherTime);
Console.WriteLine("{0} = {1}: {2}", 
                  localTime, otherTime, 
                  localTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}", 
                  localTime, otherTime, 
                  localTime.EqualsExact(otherTime));
Console.WriteLine();
                  
// Convert other time to UTC
universalTime = localTime.ToUniversalTime(); 
Console.WriteLine("Universal time: {0}", universalTime);
Console.WriteLine("{0} = {1}: {2}", 
                  otherTime, universalTime, 
                  universalTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}", 
                  otherTime, universalTime, 
                  universalTime.EqualsExact(otherTime));
Console.WriteLine();
// The example produces the following output to the console:
//    Local time: 6/15/2007 12:00:00 PM -07:00
//    
//    Other time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
//    
//    Universal time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True   
Dim localTime, otherTime, universalTime As DateTimeOffset
 
' Define local time in local time zone
localTime = New DateTimeOffset(#6/15/2007 12:00:00PM#)
Console.WriteLine("Local time: {0}", localTime)
Console.WriteLine()

' Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero)
Console.WriteLine("Other time: {0}", otherTime)
Console.WriteLine("{0} = {1}: {2}", _
                  localTime, otherTime, _
                  localTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _ 
                  localTime, otherTime, _
                  localTime.EqualsExact(otherTime))
Console.WriteLine()
                  
' Convert other time to UTC
universalTime = localTime.ToUniversalTime() 
Console.WriteLine("Universal time: {0}", universalTime)
Console.WriteLine("{0} = {1}: {2}", _
                  otherTime, universalTime, _ 
                  universalTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _ 
                  otherTime, universalTime, _
                  universalTime.EqualsExact(otherTime))
Console.WriteLine()
' The example produces the following output to the console:
'    Local time: 6/15/2007 12:00:00 PM -07:00
'    
'    Other time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
'    
'    Universal time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True   

Conversion de l’heure UTC dans un fuseau horaire désignéConverting UTC to a designated time zone

Pour convertir l’heure UTC en heure locale, consultez la section « conversion de l’heure UTC en heure locale » qui suit.To convert UTC to local time, see the "Converting UTC to Local Time" section that follows. Pour convertir l’heure UTC et l’heure dans n’importe quel fuseau horaire que vous désignez, appelez la méthode ConvertTimeFromUtc.To convert UTC to the time in any time zone that you designate, call the ConvertTimeFromUtc method. Cette méthode accepte deux paramètres :The method takes two parameters:

  • L’heure UTC à convertir.The UTC to convert. Il doit s’agir d’une valeur DateTime dont la propriété Kind a la valeur Unspecified ou Utc.This must be a DateTime value whose Kind property is set to Unspecified or Utc.

  • Le fuseau horaire vers lequel convertir l’heure UTC.The time zone to convert the UTC to.

Le code suivant convertit l’heure UTC en heure propre au fuseau horaire Centre.The following code converts UTC to Central Standard Time.

DateTime timeUtc = DateTime.UtcNow;
try
{
   TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
   DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
   Console.WriteLine("The date and time are {0} {1}.", 
                     cstTime, 
                     cstZone.IsDaylightSavingTime(cstTime) ?
                             cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Central Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.");
}
Dim timeUtc As Date = Date.UtcNow
Try
   Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
   Dim cstTime As Date = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone)
   Console.WriteLine("The date and time are {0} {1}.", _
                     cstTime, _
                     IIf(cstZone.IsDaylightSavingTime(cstTime), _
                         cstZone.DaylightName, cstZone.StandardName))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The registry does not define the Central Standard Time zone.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.")
End Try

Conversion de l’heure UTC en heure localeConverting UTC to local time

Pour convertir l’heure UTC en heure locale, appelez la méthode ToLocalTime de l’objet DateTime dont vous souhaitez effectuer la conversion.To convert UTC to local time, call the ToLocalTime method of the DateTime object whose time you want to convert. Le comportement exact de la méthode dépend de la valeur de la propriété Kind de l’objet, comme le montre le tableau suivant.The exact behavior of the method depends on the value of the object’s Kind property, as the following table shows.

DateTime.Kind ConversionConversion
DateTimeKind.Local Retourne la valeur DateTime inchangée.Returns the DateTime value unchanged.
DateTimeKind.Unspecified Suppose que la valeur DateTime est UTC et convertit l’heure UTC en heure locale.Assumes that the DateTime value is UTC and converts the UTC to local time.
DateTimeKind.Utc Convertit la valeur DateTime en heure locale.Converts the DateTime value to local time.

Notes

La méthode TimeZone.ToLocalTime se comporte de la même façon que la méthode DateTime.ToLocalTime.The TimeZone.ToLocalTime method behaves identically to the DateTime.ToLocalTime method. Il accepte un seul paramètre, qui est la valeur de date et d’heure à convertir.It takes a single parameter, which is the date and time value to convert.

Vous pouvez également convertir l’heure d’un fuseau horaire désigné en heure locale à l’aide de la méthode TimeZoneInfo.ConvertTime static (Shared dans Visual Basic).You can also convert the time in any designated time zone to local time by using the static (Shared in Visual Basic) TimeZoneInfo.ConvertTime method. Cette technique est décrite dans la section suivante.This technique is discussed in the next section.

Conversion entre deux fuseaux horaires quelconquesConverting between any two time zones

Vous pouvez effectuer une conversion entre deux fuseaux horaires quelconques à l’aide de l’une des deux méthodes static suivantes (Shared dans Visual Basic) de la classe TimeZoneInfo :You can convert between any two time zones by using either of the following two static (Shared in Visual Basic) methods of the TimeZoneInfo class:

  • ConvertTime

    Les paramètres de cette méthode sont la valeur de date et d’heure à convertir, un objet TimeZoneInfo qui représente le fuseau horaire de la valeur de date et d’heure, et un objet TimeZoneInfo qui représente le fuseau horaire vers lequel convertir la valeur de date et d’heure.This method's parameters are the date and time value to convert, a TimeZoneInfo object that represents the time zone of the date and time value, and a TimeZoneInfo object that represents the time zone to convert the date and time value to.

  • ConvertTimeBySystemTimeZoneId

    Les paramètres de cette méthode sont la valeur de date et d’heure à convertir, l’identificateur du fuseau horaire de la valeur de date et d’heure et l’identificateur du fuseau horaire vers lequel convertir la valeur de date et d’heure.This method's parameters are the date and time value to convert, the identifier of the date and time value's time zone, and the identifier of the time zone to convert the date and time value to.

Les deux méthodes requièrent que la propriété Kind de la valeur de date et d’heure à convertir et l’objet TimeZoneInfo ou l’identificateur de fuseau horaire qui représente son fuseau horaire correspondent l’un à l’autre.Both methods require that the Kind property of the date and time value to convert and the TimeZoneInfo object or time zone identifier that represents its time zone correspond to one another. Sinon, une exception ArgumentException est levée.Otherwise, an ArgumentException is thrown. Par exemple, si la propriété Kind de la valeur de date et d’heure est DateTimeKind.Local, une exception est levée si l’objet TimeZoneInfo passé comme paramètre à la méthode n’est pas égal à TimeZoneInfo.Local.For example, if the Kind property of the date and time value is DateTimeKind.Local, an exception is thrown if the TimeZoneInfo object passed as a parameter to the method is not equal to TimeZoneInfo.Local. Une exception est également levée si l’identificateur passé comme paramètre à la méthode n’est pas égal à TimeZoneInfo.Local.Id.An exception is also thrown if the identifier passed as a parameter to the method is not equal to TimeZoneInfo.Local.Id.

L’exemple suivant utilise la méthode ConvertTime pour convertir l’heure standard d’Hawaii en heure locale.The following example uses the ConvertTime method to convert from Hawaiian Standard Time to local time.

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.", 
           hwTime, 
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName, 
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.");
}
Dim hwTime As Date = #2/01/2007 8:00:00 AM#
Try
   Dim hwZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time")
   Console.WriteLine("{0} {1} is {2} local time.", _
                     hwTime, _
                     IIf(hwZone.IsDaylightSavingTime(hwTime), hwZone.DaylightName, hwZone.StandardName), _
                     TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.")
End Try                     

Conversion de valeurs DateTimeOffsetConverting DateTimeOffset values

Les valeurs de date et d’heure représentées par DateTimeOffset objets ne prennent pas complètement en charge les fuseaux horaires, car l’objet est dissocié de son fuseau horaire au moment où il est instancié.Date and time values represented by DateTimeOffset objects are not fully time-zone aware because the object is disassociated from its time zone at the time it is instantiated. Toutefois, dans de nombreux cas, une application doit simplement convertir une date et une heure en fonction de deux décalages différents par rapport à l’heure UTC plutôt qu’en fonction de l’heure dans des fuseaux horaires particuliers.However, in many cases an application simply needs to convert a date and time based on two different offsets from UTC rather than on the time in particular time zones. Pour effectuer cette conversion, vous pouvez appeler la méthode ToOffset de l’instance actuelle.To perform this conversion, you can call the current instance's ToOffset method. Le paramètre unique de la méthode est le décalage de la nouvelle valeur de date et d’heure que la méthode doit retourner.The method's single parameter is the offset of the new date and time value that the method is to return.

Par exemple, si la date et l’heure d’une demande de page web de l’utilisateur sont connues et sont sérialisées comme chaîne au format MM/jj/aaaa hh:mm:ss zzzz, la méthode ReturnTimeOnServer qui suit convertit cette valeur de date et d’heure en date et heure sur le serveur web.For example, if the date and time of a user request for a Web page is known and is serialized as a string in the format MM/dd/yyyy hh:mm:ss zzzz, the following ReturnTimeOnServer method converts this date and time value to the date and time on the Web server.

public DateTimeOffset ReturnTimeOnServer(string clientString)
{
   string format = @"M/d/yyyy H:m:s zzz";
   TimeSpan serverOffset = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now);
   
   try
   {      
      DateTimeOffset clientTime = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture);
      DateTimeOffset serverTime = clientTime.ToOffset(serverOffset);
      return serverTime;
   }
   catch (FormatException)
   {
      return DateTimeOffset.MinValue;
   }
}
Public Function ReturnTimeOnServer(clientString As String) As DateTimeOffset
   Dim format As String = "M/d/yyyy H:m:s zzz"
   Dim serverOffset As TimeSpan = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now)
   
   Try      
      Dim clientTime As DateTimeOffset = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture)
      Dim serverTime As DateTimeOffset = clientTime.ToOffset(serverOffset)
      Return serverTime
   Catch e As FormatException
      Return DateTimeOffset.MinValue
   End Try    
End Function

Si la chaîne « 9/1/2007 5:32:07 -05:00 », qui représente la date et l’heure d’un fuseau horaire cinq heures avant l’heure UTC, est passée à la méthode, elle retourne 9/1/2007 3:32:07 AM-07:00 pour un serveur situé dans le fuseau horaire Pacifique (États-Unis).If the method is passed the string "9/1/2007 5:32:07 -05:00", which represents the date and time in a time zone five hours earlier than UTC, it returns 9/1/2007 3:32:07 AM -07:00 for a server located in the U.S. Pacific Standard Time zone.

La classe TimeZoneInfo comprend également une surcharge de la méthode TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) qui effectue des conversions de fuseau horaire avec des valeurs ToOffset(TimeSpan).The TimeZoneInfo class also includes an overload of the TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) method that performs time zone conversions with ToOffset(TimeSpan) values. Les paramètres de la méthode sont une valeur DateTimeOffset et une référence au fuseau horaire dans lequel l’heure doit être convertie.The method's parameters are a DateTimeOffset value and a reference to the time zone to which the time is to be converted. L’appel de méthode retourne une valeur DateTimeOffset.The method call returns a DateTimeOffset value. Par exemple, la méthode ReturnTimeOnServer dans l’exemple précédent peut être réécrite comme suit pour appeler la méthode ConvertTime(DateTimeOffset, TimeZoneInfo).For example, the ReturnTimeOnServer method in the previous example could be rewritten as follows to call the ConvertTime(DateTimeOffset, TimeZoneInfo) method.

public DateTimeOffset ReturnTimeOnServer(string clientString)
{
   string format = @"M/d/yyyy H:m:s zzz";
   
   try
   {      
      DateTimeOffset clientTime = DateTimeOffset.ParseExact(clientString, format, 
                                  CultureInfo.InvariantCulture);
      DateTimeOffset serverTime = TimeZoneInfo.ConvertTime(clientTime, 
                                  TimeZoneInfo.Local);
      return serverTime;
   }
   catch (FormatException)
   {
      return DateTimeOffset.MinValue;
   }
}
Public Function ReturnTimeOnServer(clientString As String) As DateTimeOffset
   Dim format As String = "M/d/yyyy H:m:s zzz"
   
   Try      
      Dim clientTime As DateTimeOffset = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture)
      Dim serverTime As DateTimeOffset = TimeZoneInfo.ConvertTime(clientTime, TimeZoneInfo.Local)
      Return serverTime
   Catch e As FormatException
      Return DateTimeOffset.MinValue
   End Try    
End Function

Voir aussiSee also