2009-02-06 5 views
3

Est-ce que quelqu'un sait comment convertir ces valeurs hexadécimales en valeurs DateTime?SPListItem.Properties Les champs DateTime sont dans un format Hex bizarre

Propriété my_DateProperty (System.String) = 0x01c9874e | 0x98f28800

//l_item is SPListItem   
Hashtable l_properties = l_item.Properties; 
if (l_properties != null) 
{ 
    object l_value = null; 
    foreach (string l_key in l_properties.Keys) 
    { 
     l_value = l_properties[l_key]; 
     Splogger.log("Property " + l_key + " (" + l_value.GetType().ToString() + ") = " + l_value.ToString()); 
    } 
} 
+1

Je l'ai remarqué aussi, cela ne semble être le cas que lorsque vous accédez à des propriétés via le HashTable, pas directement à partir de l'élément de la liste. Je pense que cela a à voir avec la façon dont la classe HashTable stocke les données. – Jason

+0

Voir aussi cette question http://sharepoint.stackexchange.com/questions/66602/dates-and-times-in-properties-vs-fields/91069#91069 – SHug

Répondre

7

J'ai découvert récemment que cela semble se produire uniquement sur les documents Office 2007 (pour les autres types de fichiers, la valeur est un format de chaîne standard pour une date). La réponse est que la valeur hexadécimale représente le nombre de graduations depuis le 1/1/1600. Voici une conversion qui a fonctionné pour moi:

Dim dateVal as DateTime = Nouveau DateTime (Long.Parse (dateText.Replace ("0x", "") .Remplacer ("|", ""), System.Globalization .NumberStyles.HexNumber)). AddYears (1600)

+0

Avez-vous déterminé pourquoi cela n'arrive qu'aux documents Office 2007? C'est un cas vraiment bizarre à prendre en compte, étant donné que les bibliothèques de documents sont supposées supporter de nombreux types de fichiers dans l'attente d'un comportement cohérent. J'ai été aux prises avec cette question et presque a conclu que l'article a été corrompu. Heureux je suis tombé sur ce post! –

0

pourrait être vous que le datetime est converti en une date "invariant" par le ToString. See this.

Questions connexes