mardi 11 janvier 2011

Timestamp UNIX en VB.NET

Dans le cadre d'un projet sur lequel je bosse en entreprise, il m'est arrivé de devoir manipuler les timestamp UNIX en VB.NET. Or les sources à ce sujet sont peu généreuses sur la toile.

On fournit notamment une fonction pour passer d'un timestamp à une date, comme ceci :

Public Function DateFromTimestamp(ByVal timestamp As Long) As DateTime
Dim debut As New DateTime(1970, 1, 1, 0, 0, 0)
Return debut.AddSeconds(timestamp)
End Function


Pour preuve :
P:\>php -r "echo time();"
1294733118


MessageBox.Show(DateFromTimestamp(1294733118).ToString) ' Résultat : "11/01/2011 08:05:18"


Pour récupérer le timestamp d'une date, c'est un poil plus délicat mais pas impossible. On dispose de la propriété Ticks pour une instance DateTime, qui renvoie le nombre de "Ticks" correspondant à une date donnée par 100 nanosecondes. Seulement, on ne sait pas depuis quand. Cependant, on sait qu'un timestamp correspond au nombre de secondes écoulées depuis le premier Janvier 1970 à minuit - le début de l'ère UNIX - et une date lambda. Il suffit donc de récupérer, pour chacune de ces deux dates, le nombre de Ticks, d'en faire la différence et de multiplier le tout par 10-7 pour convertir nos ticks en secondes.

Public Function TimeStamp(Optional ByVal laDate As DateTime = Nothing) As Long
If laDate = Nothing Then
laDate = DateTime.Now
End If
Dim TicksDebut As Long = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local).Ticks
Dim TicksActuels As Long = laDate.Ticks

Return Math.Floor((TicksActuels - TicksDebut) * Math.Pow(10, -7))
End Function


Puisse cette petite astuce servir à quelques développeurs...

Ge0

Aucun commentaire:

Enregistrer un commentaire