Comment faire pour convertir un byte[] dans datetime en C#?
J'ai un champ de type TimeStamp dans la base de données, qui est converti en byte[] dans le code c#, et j'ai besoin de le convertir en valeur de type DateTime.
Je tiens donc à convertir à partir d'un tableau d'octets en DateTime.
Déjà utilisé ce code:
byte[] byteValue = someValue;
long longVar = BitConverter.ToInt64(byteValue);
DateTime dateTimeVar = DateTime.FromBinary(longVar);
est-ce ok?
Pourquoi avez-vous convertir le timestamp de byte[] en premier lieu?
Sans savoir où le byte[] est venu, vous pourriez avoir à traiter avec de l'endianness questions.
Cela dépend de ce que tu veux dire par "ok". Je n'ai jamais essayé cette approche, mais il ne semble pas particulièrement intuitive moyen de récupérer la date et l'heure à partir d'une base de données.
Vous ne mentionnez pas la serveur de base de données que vous obtenez ce. J'ai supposé SQL Server (surtout si votre couche d'accès aux données n'est pas automatiquement la conversion d'une valeur DateTime)
ce n'était pas ma décision, c'est fait par une tierce partie, outils permettant de générer le code, par exemple codesmith.
Sans savoir où le byte[] est venu, vous pourriez avoir à traiter avec de l'endianness questions.
Cela dépend de ce que tu veux dire par "ok". Je n'ai jamais essayé cette approche, mais il ne semble pas particulièrement intuitive moyen de récupérer la date et l'heure à partir d'une base de données.
Vous ne mentionnez pas la serveur de base de données que vous obtenez ce. J'ai supposé SQL Server (surtout si votre couche d'accès aux données n'est pas automatiquement la conversion d'une valeur DateTime)
ce n'était pas ma décision, c'est fait par une tierce partie, outils permettant de générer le code, par exemple codesmith.
OriginalL'auteur george_test | 2010-02-16
Vous devez vous connecter pour publier un commentaire.
Non, ce n'est pas correct.
La
FromBinary
méthode prend une valeur de type long qui est créé à l'aide de laToBinary
méthode. Il contient lesKind
etTicks
composants, et ce n'est pas ce qu'est une base de données d'horodatage contient.À l'aide de
BitConverter
pour obtenir la valeur de type long est correct, mais alors vous devez prendre le temps de l'origine de l'horodatage et d'ajouter de la valeur long que la bonne unité. En supposant que c'est un timestamp à partir d'une base de données MySQL, autant que je me souvienne c'est le nombre de millisecondes à partir de 1980-01-01:startIndex paramètre est manquant dans le BitConverter méthode. Il devrait être BitConverter.ToInt64(byteValue, 0) Case msdn.microsoft.com/en-us/library/...
Oui, bien sûr. Merci pour le spotting, j'ai corrigé la réponse.
OriginalL'auteur Guffa
Une colonne timestamp dans SQL Server (maintenant appelé rowversion) n'est pas convertible d'une valeur datetime - c'est purement une monotone croissante de la valeur attribuée par le serveur.
bascially, c'est mal nommé, c'est pourquoi il est maintenant plus correctement appelé "rowversion", pas "timestamp". Il n'a pas (SQL Server) ont trait à la durée tout, d'autres que d'être (déjà décrite) de plus en plus monotone.
thnx thnx et thnx de nouveau. J'ai ajouté une colonne de type date, et maintenant je ne l'utilise que pour mes fins.
OriginalL'auteur Damien_The_Unbeliever