<JoeBloggerData>
  <SiteData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ServerPath>http://www.eightypercent.net</ServerPath>
    <SiteName>Joe Beda's EightyPercent.Net</SiteName>
    <NextEntryNumber>63</NextEntryNumber>
  </SiteData>
  <Days>
    <BlogDay xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Date="Sun, 9 Mar 2003">
      <Entries>
        <BlogEntry>
          <Title>More on RSS dates</Title>
          <Description>&lt;p&gt;&lt;a href="http://ocw.abf.tulane.edu/blog/"&gt;Jorge Curioso&lt;/a&gt; &lt;a href="http://ocw.abf.tulane.edu/blog/?item=63182667125303"&gt;posted on his blog&lt;/a&gt; some comments around dealing with dates in RSS and the .Net framework.  I figure I'd put some more detail up here on how I handle dates in JoeBlogger.
&lt;ol&gt;
&lt;li&gt;I store both GMT and local time when creating an entry.  I should probably keep a "last updated" time too but I haven't done that yet.  From these two you can either output absolute time (for RSS) or you can output local time so that everyone can know your state of mind when you made that post.  It makes a difference if you are posting at 5 am in the morning vs. 10 am.
&lt;li&gt;I used C# to do all of my date processing.  Here is the code for my properites for these things:
&lt;pre&gt;
        // The PubDate here is in universal time -- UTC
        [XmlIgnore]
        public DateTime PubDate;

        [XmlElement(ElementName="PubDate")]
        public string PubDateString 
        {
            get
            {
                return PubDate.ToString("r");
            }
            set
            {
                PubDate = DateTime.ParseExact(value,"r", null);
            }
        }

        [XmlIgnore]
        public DateTime LocalPubDate;

        [XmlElement(ElementName="LocalPubDate")]
        public string LocalPubDateString 
        {
            get
            {
                return LocalPubDate.ToString("ddd, dd MMM yyyy HH':'mm':'ss");
            }
            set
            {
                try
                {
                    LocalPubDate = DateTime.ParseExact(value,"ddd, dd MMM yyyy HH':'mm':'ss", null);
                }
                catch (FormatException)
                {
                    LocalPubDate = DateTime.MinValue;
                }
            }
        }
&lt;/pre&gt;
&lt;li&gt;Finially, I do all of the massaging from these times into my display times in the stylesheet itself.  &lt;a href="http://www.eightypercent.net/Stuff/SourceExample.xml"&gt;Here&lt;/a&gt; is an example of a source XML document for my main page and &lt;a href="http://www.eightypercent.net/Templates/Main.xslt"&gt;here&lt;/a&gt; is my XSLT template for transforming that.  If you can assume the .Net implementation of XSLT, you can use some MS specific extensions like this:
&lt;pre&gt;
    &amp;lt;msxsl:script implements-prefix='user' language='CSharp'&amp;gt;
        &amp;lt;![CDATA[
        public string FormatTime(string input)
        {
            DateTime dt = DateTime.ParseExact(input, "ddd, dd MMM yyyy HH':'mm':'ss", null);
            return dt.ToString("h':'mm':'ss tt");
        }
        public string FormatArchiveLink(string input)
        {
            DateTime dt = DateTime.ParseExact(input, "ddd, dd MMM yyyy HH':'mm':'ss", null);
            return String.Format(@"/Archive/{0:D4}/{1:D2}/{2:D2}.html", dt.Date.Year, dt.Date.Month, dt.Date.Day);
        }
        ]]&amp;gt;
    &amp;lt;/msxsl:script&amp;gt;
&lt;/pre&gt;
And then use that in the output like this:
&lt;pre&gt;
&amp;lt;xsl:value-of select="user:FormatTime(LocalPubDate)"/&amp;gt;
&lt;/pre&gt;
&lt;/ol&gt;

&lt;p&gt;It might be a good thing if we someone came up with a namespaced extension for RSS to speicfy local time along with GMT.  Having "First published" and "Last changed" times might be interesting also.  Perhaps I'll write something up at some point.
</Description>
          <BlogEntryNumber>62</BlogEntryNumber>
          <PubDate>Sun, 09 Mar 2003 17:26:04 GMT</PubDate>
          <LocalPubDate>Sun, 09 Mar 2003 10:26:04</LocalPubDate>
        </BlogEntry>
      </Entries>
    </BlogDay>
    <BlogDay xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Date="Fri, 7 Mar 2003">
      <Entries>
        <BlogEntry>
          <Title>Shiggity Shiggity Shwa</Title>
          <Description>&lt;a href="http://neelbubba.com/Play/"&gt;Bubba&lt;/a&gt; got all the mad &lt;a href="http://www.gamecubicle.com/specials-mario_twins_shiggidy.htm"&gt;links&lt;/a&gt;.</Description>
          <BlogEntryNumber>61</BlogEntryNumber>
          <PubDate>Fri, 07 Mar 2003 21:40:39 GMT</PubDate>
          <LocalPubDate>Fri, 07 Mar 2003 14:40:39</LocalPubDate>
        </BlogEntry>
        <BlogEntry>
          <Title>MichaelW's RSS feed</Title>
          <Description>MichaelW &lt;i&gt;does&lt;/i&gt; have an RSS feed -- he just makes it really hard to find:&lt;br&gt;
&lt;a href="http://michaelw.net/Articles/YesIhaveanRSSfeed.html"/&gt;http://michaelw.net/Articles/YesIhaveanRSSfeed.html&lt;/a&gt;
&lt;p&gt;And the latest version of Syndirella can eat his dates but he still has it all screwed up.  I think that he is outputting GMT for when he started the post but marking the date with EST.  Then, when displaying it on his HTML site, he is outputting true EST for the last change of the post.  Times zones and weblogs are hard.  It sounds like they are even harder in CityDesk.  Dates and times are something that everyone stumbles on wrt weblog software..  I know that &lt;a href="http://www.simplegeek.com"&gt;ChrisAn&lt;/a&gt; has had some problems too.</Description>
          <BlogEntryNumber>60</BlogEntryNumber>
          <PubDate>Fri, 07 Mar 2003 21:16:43 GMT</PubDate>
          <LocalPubDate>Fri, 07 Mar 2003 14:16:43</LocalPubDate>
        </BlogEntry>
        <BlogEntry>
          <Title>Code Blue</Title>
          <Description>&lt;p&gt;My wife, Rachel, has her blog up and running.  It has absolutely nothing whatsoever to do with computers or code.  Instead of being a computer dork, she is going to be a medical dork!  She is going to tell funny stories from the hospital.
&lt;p&gt;&lt;a href="http://www.eightypercent.net/codeblue"&gt;http://www.eightypercent.net/codeblue&lt;/a&gt;</Description>
          <BlogEntryNumber>59</BlogEntryNumber>
          <PubDate>Fri, 07 Mar 2003 17:22:08 GMT</PubDate>
          <LocalPubDate>Fri, 07 Mar 2003 10:22:08</LocalPubDate>
        </BlogEntry>
      </Entries>
    </BlogDay>
    <BlogDay xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Date="Thu, 6 Mar 2003">
      <Entries>
        <BlogEntry>
          <Title>Happy Math</Title>
          <Description>&lt;a href="http://www.fastcompany.com/online/68/richlife.html"&gt;How To Lead a Rich Life&lt;/a&gt; from &lt;a href="http://www.neelbubba.com/Play/Archive/2003_03_01_index.php#90208936"&gt;Bubba&lt;/a&gt;.  I particularly like the happiness price list.</Description>
          <BlogEntryNumber>58</BlogEntryNumber>
          <PubDate>Thu, 06 Mar 2003 18:56:05 GMT</PubDate>
          <LocalPubDate>Thu, 06 Mar 2003 11:56:05</LocalPubDate>
        </BlogEntry>
      </Entries>
    </BlogDay>
    <BlogDay xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Date="Wed, 5 Mar 2003">
      <Entries>
        <BlogEntry>
          <Title>Another stupid quiz...</Title>
          <Description>&lt;a href="http://home.att.net/~slugbutter/evil/" target="new"&gt;&lt;img src="http://home.att.net/~slugbutter/evil/neutral.jpg" border=0&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://home.att.net/~slugbutter/evil/" target="new"&gt;How evil are &lt;i&gt;you&lt;/i&gt;?&lt;/a&gt;</Description>
          <BlogEntryNumber>57</BlogEntryNumber>
          <PubDate>Wed, 05 Mar 2003 16:52:23 GMT</PubDate>
          <LocalPubDate>Wed, 05 Mar 2003 09:52:23</LocalPubDate>
        </BlogEntry>
      </Entries>
    </BlogDay>
    <BlogDay xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Date="Mon, 3 Mar 2003">
      <Entries>
        <BlogEntry>
          <Title>More FTP stuff</Title>
          <Description>&lt;p&gt;&lt;a href="http://www.simplegeek.com/permalink.aspx/55cdfe57-82bf-47aa-9beb-5dc06d966724"&gt;Bitch&lt;/a&gt;, &lt;a href="http://www.simplegeek.com/permalink.aspx/063d639b-10c7-4826-9f5f-0b6c026a9268"&gt;bitch&lt;/a&gt;, bitch.  Okay, Chris, what &lt;i&gt;do&lt;/i&gt; you want in the FTP upstreamer?  I don't think that Radio's upstreamer deletes either.  Here is what I can do easily:
&lt;ul&gt;
&lt;li&gt;CD to a directory.  Throw if the dir isn't there.
&lt;li&gt;[done] Ensure a directory.  Try my best to make sure that a directory (and the path up to it) exists.
&lt;li&gt;Delete a directory.  The server will probably return an error if there are files in it.  I will throw.
&lt;li&gt;Get the current directory.
&lt;li&gt;Move up a direcotry.
&lt;li&gt;[done] Upload a file into the current directory.
&lt;li&gt;Download a file in the current directory and return a stream.  It would be easiest to buffer the entire file in memory.
&lt;li&gt;Delete a file in the current directory.
&lt;li&gt;[done] Return a text string with the current directory listing.
&lt;li&gt;Call SYST and return whatever the system gives us.  This might help detect the type of system on the other end.
&lt;/ul&gt;
&lt;p&gt;The only thing that isn't easy and that will probably take quite a while to get right is parsing the output of the directory listing.  I don't have a bunch of servers to test this against to make sure it will work.
&lt;p&gt;As for the upstreamer itself, I'd rather have it not try and sync the stuff on the server (and hence delete stuff) because I'd be afraid of loosing data.  For instance, I upstream into the root of my site and I have all sorts of subdirs off of that.  I'm setting up a weblog for Rachel on eightypercent.net and her root will be a subdir.  I don't want to clobber her stuff whenever I upload my site.</Description>
          <BlogEntryNumber>56</BlogEntryNumber>
          <PubDate>Mon, 03 Mar 2003 18:04:00 GMT</PubDate>
          <LocalPubDate>Mon, 03 Mar 2003 11:04:00</LocalPubDate>
        </BlogEntry>
      </Entries>
    </BlogDay>
  </Days>
  <Calendar>&lt;Table class="ArchiveTable"&gt;&lt;TR class="ArchiveHeaderRow"&gt;&lt;TD&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/02/28.html"&gt;&amp;lt;&amp;lt;&lt;/A&gt;&lt;/TD&gt;&lt;TD colspan="5" class="ArchiveMonthName"&gt;March, 2003&lt;/TD&gt;&lt;TD&gt;&amp;gt;&amp;gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveDayOfWeekRow"&gt;&lt;TD&gt;Sun&lt;/TD&gt;&lt;TD&gt;Mon&lt;/TD&gt;&lt;TD&gt;Tue&lt;/TD&gt;&lt;TD&gt;Wed&lt;/TD&gt;&lt;TD&gt;Thu&lt;/TD&gt;&lt;TD&gt;Fri&lt;/TD&gt;&lt;TD&gt;Sat&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveRegularRow"&gt;&lt;TD&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/02/23.html"&gt;23&lt;/A&gt;&lt;/TD&gt;&lt;TD&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/02/24.html"&gt;24&lt;/A&gt;&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;26&lt;/TD&gt;&lt;TD&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/02/27.html"&gt;27&lt;/A&gt;&lt;/TD&gt;&lt;TD&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/02/28.html"&gt;28&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/01.html"&gt;1&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveRegularRow"&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/02.html"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/03.html"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;4&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/05.html"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/06.html"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/07.html"&gt;7&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveRegularRow"&gt;&lt;TD class="ArchiveHighlightDay"&gt;&lt;A href="http://www.eightypercent.net/Archive/2003/03/09.html"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;10&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;11&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;12&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;13&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;14&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveRegularRow"&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;16&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;17&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;18&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;19&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;20&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;21&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;22&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveRegularRow"&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;23&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;24&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;25&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;26&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;27&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;28&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;29&lt;/TD&gt;&lt;/TR&gt;&lt;TR class="ArchiveRegularRow"&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;30&lt;/TD&gt;&lt;TD class="ArchiveCurrentMonthDay"&gt;31&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;/Table&gt;</Calendar>
</JoeBloggerData>