Je passe récemment à partir de l'espace de noms S.DS (qui utilise ADSI) à l'espace de noms S 2SD.Protocol. Le seul problème est que l'ADSI a géré la conversion du temps généralisé vers une date d'heure pour moi. Maintenant, je récupère une valeur de "20070828085401.0z" pour l'attribut uvechanged. DateTime.Parse () ne convertira pas cela, alors y a-t-il un autre moyen? P>
4 Réponses :
Vous devrez utiliser datetime.parseexact () code> spécifiant le format exact.
Vous devrez peut-être jouer avec le format un peu, mais ce serait quelque chose comme ça.
Le format que vous obtenez est proche du schéma temporel de la date d'aller-retour ("O") et de la date de date de la date d'arrondi tripable universelle ("u") Standard Date Time Format Strings comme décrit ICI .
Une solution de kludgy serait de masser la chaîne que vous obtenez adapté au motif, puis Utilisez la chaîne de format standard "O" ou "u" avec parseexact . p>
Un meilleur moyen serait de construire un format personnalisé String qui correspond aux données que vous obtenez déjà. Dans la section "Comment Standard Format Strings" de la page Format de la date standard Time Format Strings, vous verrez les chaînes de formatage personnalisées complètes équivalentes à "O" et "U". Cela devrait vous donner un bon départ. P>
string format = "yyyyMMddHHmmss.f'Z'";
string target = "20070828085401.0Z";
DateTime d = DateTime.ParseExact(target, format, CultureInfo.InvariantCulture);
Selon: Outils.ietf.org/html/rfc4517#section-3.3.13 Cela ne passera pas pour: 199412160532-0500 code>
Vous pouvez utiliser .stryptime () code>. TIME_OBJECT CODE> doit sortir comme DateTime.DateTetime (2007, 8, 28, 8, 54, 1) code>. Je crois que ce sera le Timezone naïf et équivalent à l'UTC Time. P> P>
Le titre de la question et la balise laissent clairement que OP parle de c #, pas de python. Donc, cette réponse est inadéquate ici.
// WIN32 FILETIME is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC).
// While the unix timestamp represents the seconds since January 1, 1970 (UTC).
private static long Win32FileTimeToUnixTimestamp(long fileTime)
{
//return fileTime / 10000L - 11644473600000L;
return DateTimeOffset.FromFileTime(fileTime).ToUnixTimeSeconds();
}
// The GeneralizedTime follows ASN.1 format, something like: 20190903130100.0Z and 20190903160100.0+0300
private static long GeneralizedTimeToUnixTimestamp(string generalizedTime)
{
var formats = new string[] { "yyyyMMddHHmmss.fZ", "yyyyMMddHHmmss.fzzz" };
return DateTimeOffset.ParseExact(generalizedTime, formats, System.Globalization.CultureInfo.InvariantCulture).ToUnixTimeSeconds();
}