Vb.net, creare una data in formato W3C per una sitemap


Per creare una sitemap.xml occorre inserire le date nel formato definito dal W3C, che non è nativo in .net. Vediamo un modo semplice per generarle. 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. :-)


Post correlati: