Penso che questo sia un problema che ogni programmatore .net abbia affrontato ogni volta che abbia cercato di generare una
sitemap. Le date in
formato W3C.
Per chi non lo sapesse la
sitemap è un semplice file xml che risiede (o meglio che dovrebbe risiedere) nella
sitemap di ogni sito per facilitare l'indicizzazione da parte dei motori di ricerca. Le
sitemap sono adottate dai principali motori di ricerca, in particolare da
Google, da
Yahoo e da
Bing. Il
protocollo è molto semplice ed è facile da implementare. L'unica cosa particolare in effetti è il modo in cui è richiesto siano scritte le date.
Vediamo un xml di esempio tratto dal sito ufficiale della sitemaps:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://www.esempio.it/sitemap1.xml.gz</loc>
<lastmod>2004-10-01T18:23:17+00:00</lastmod>
</sitemap>
<sitemap>
<loc>http://www.esempio.it/sitemap2.xml.gz</loc>
<lastmod>2005-01-01</lastmod>
</sitemap>
</sitemapindex>
Come vedete nel primo nodo
sitemap, c'è un tag
lastmod che indica la data di ultima modifica della file indicato nel tag
loc. La data può essere scritta con o senza orario. Senza orario il formato è molto semplice da ottenere basta un codice del tipo
DataUltimaModifica.ToString("yyyy-MM-dd")
Ma per ottenere il formato con l'orario, non abbiamo nessuna primitiva .net che ci permetta di ottenere il risultato voluto. Occorre metterci un pochino le mani, ma sapendo come, è altrettanto semplice. Vediamo come:
DataUltimaModifica.ToUniversalTime.ToString("u").Replace(" ", "T"))
In pratica con il metodo ToUniversalTime otteniamo quasi quello che ci serve. Il problema è che la dato e l'orario sono separati da uno spazio. E quindi noi sostituiamo lo spazio con la T richiesta dal formato, per ottenere il risultato voluto.
Happy coding. :-)