Je suis en train de test unitaire la méthode suivante:Unité .Net Test du décalage horaire UTC et locale
Public Shared Function GetLocalTimeWithTimeDifferenceUTC(startTime As DateTime) As String
Dim localTime As String = ""
Dim timeUTC As DateTime = startTime.ToUniversalTime()
Dim timeDiff As TimeSpan = startTime.Subtract(timeUTC)
Dim sSign As String = "+"
If timeDiff.TotalMinutes < 0 Then
sSign = "-"
timeDiff = timeDiff.Negate
End If
Dim offsetUTC As String = sSign & String.Format("{0:d2}:{1:d2}", timeDiff.Hours, timeDiff.Minutes)
localTime = startTime.ToString("yyyy-MM-ddTHH:mm:ss") & offsetUTC
Return localTime
End Function
Il retourne (par exemple startTime = 2015,3,18,10,0,0 décalage horaire est plus deux heures) 2015-03-18T10: 00: 00 + 02: 00.
Voici mon test unitaire:
Public Sub GetLocalTimeWithTimeDifferenceUTC_Test()
Dim expected As String
Dim actual As String
Dim param As New System.DateTime(2015, 3, 5, 10, 0, 0)
expected = "2015-03-05T10:00:00+03:00"
Using (ShimsContext.Create())
System.Fakes.ShimDateTime.NowGet = Function() As System.DateTime
Return New DateTime(2015, 3, 5, 10, 0, 0)
End Function
System.Fakes.ShimDateTime.UtcNowGet = Function() As System.DateTime
Return New DateTime(2015, 3, 5, 7, 0, 0)
End Function
actual = StringFunctions.GetLocalTimeWithTimeDifferenceUTC(param)
End Using
Assert.AreEqual(expected, actual)
End Sub
Les changements que j'applique à DateTime.Now et DateTime.UtcNow ne fonctionnent pas et le test échoue. Quand j'essaye avec mon vrai temps local, ça fonctionne. Est-il possible que provienne de la fonction ToUniversalTime()? Dois-je changer quelque chose dans mon approche? Toute aide serait appréciée. Merci d'avance.
Vous ne l'avez pas montré tout code partout qui appelle '' DateTime.Now' ou DateTime.UtcNow'. GetLocalStartTime est-il censé faire cela? Vous n'avez pas montré ce code - seulement 'GetLocalTimeWithTimeDifferenceUTC'. En aparté, tout ceci est assez désagréable - si vous voulez une heure locale avec un décalage de UTC, c'est ce que le type 'DateTimeOffset' est pour ... –
Oh, GetLocalStartTime est GetLocalTimeWithTimeDifferenceUTC, une faute de frappe, je l'ai changé maintenant . Je suppose que ToUniversalTime() utilise DateTime.Now et DateTime.UtcNow. Ai-je tort? – Rany
Non, pourquoi 'ToUniversalTime' ferait-il quelque chose avec' DateTime.Now' ou 'DateTime.UtcNow'? Il est appelé sur un DateTime spécifique ... –