<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to DateTimeCalendarTimeZoneClasses</title><link>https://sourceforge.net/p/threeten/oldwiki/DateTimeCalendarTimeZoneClasses/</link><description>Recent changes to DateTimeCalendarTimeZoneClasses</description><atom:link href="https://sourceforge.net/p/threeten/oldwiki/DateTimeCalendarTimeZoneClasses/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 22 May 2014 22:08:11 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/threeten/oldwiki/DateTimeCalendarTimeZoneClasses/feed" rel="self" type="application/rss+xml"/><item><title>DateTimeCalendarTimeZoneClasses modified by Stephen Colebourne</title><link>https://sourceforge.net/p/threeten/oldwiki/DateTimeCalendarTimeZoneClasses/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;This choice is about how to integrate time zones with the calendar classes. &lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#option-1-parallel-classes"&gt;Option 1 - Parallel classes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#option-2-superclass-and-two-subclasses-zoned-and-local"&gt;Option 2 - Superclass and two subclasses (zoned and local)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#option-3-special-local-time-zone"&gt;Option 3 - Special 'local' time zone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#option-4-zoned-generic-class"&gt;Option 4 -Zoned generic class&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="option-1-parallel-classes"&gt;Option 1 - Parallel classes&lt;/h2&gt;
&lt;p&gt;With this option we would create one time zone aware class for every local class. Exactly which classes that would be depends on DateTimeCalendarClasses. One possible scenario would be: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ZonedYear &lt;/li&gt;
&lt;li&gt;ZonedMonth &lt;/li&gt;
&lt;li&gt;ZonedDate &lt;/li&gt;
&lt;li&gt;ZonedHour &lt;/li&gt;
&lt;li&gt;... &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The advantage is consistency with the main set of local classes. &lt;/p&gt;
&lt;p&gt;The disadvantage is another set of classes to use and be familiar with. &lt;/p&gt;
&lt;p&gt;A related problem is that once you have two classes that are very similar, users expect there to be a common superclass. &lt;/p&gt;
&lt;p&gt;This option only provides a method on &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ZonedDate&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;called &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;getCalendarDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;, or similar. If a use writes an API that can accept a date (and the API doesn't care whether it has a time zone or not), then the API must be written to take a &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;CalendarDate&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;. The caller of that API would have to extract the &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;CalendarDate&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;from their &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ZonedDate&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;to call the API. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;doStuff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CalendarDate&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

 &lt;span class="n"&gt;ZonedDate&lt;/span&gt; &lt;span class="n"&gt;zd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
 &lt;span class="n"&gt;doStuff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;zd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getCalendarDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="option-2-superclass-and-two-subclasses-zoned-and-local"&gt;Option 2 - Superclass and two subclasses (zoned and local)&lt;/h2&gt;
&lt;p&gt;This variation on option 1 has a superclass for each class and two subclasses - one zoned and one local: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CalendarDate - superclass - makes no statement on time zones &lt;/li&gt;
&lt;li&gt;LocalDate - subclass - states that there is no time zone (date is local) &lt;/li&gt;
&lt;li&gt;ZonedDate - subclass - has full time zone information and calculations &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This does simplify the example in option 1, allowing the API to be defined to take any date, just a local date, or just a zoned date. &lt;/p&gt;
&lt;p&gt;The disadvantage is a third set of classes in the JSR. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;doStuff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CalendarDate&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

 &lt;span class="n"&gt;ZonedDate&lt;/span&gt; &lt;span class="n"&gt;zd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
 &lt;span class="n"&gt;doStuff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;zd&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="option-3-special-local-time-zone"&gt;Option 3 - Special 'local' time zone&lt;/h2&gt;
&lt;p&gt;This option converts all the local datetime classes to be dual-use. Thus, CalendarDate would have a new time zone property. If the time zone is the special 'local' zone then the date is local. Otherwise, the date is zoned. &lt;/p&gt;
&lt;p&gt;The advantage is reuse of a single API by passing in a parameter. &lt;/p&gt;
&lt;p&gt;The disadvantage is that the javadoc would be very complex. It would have to try to describe what values are valid or not valid, and what will occur when it differs depending on whether it is a special local zone or not. &lt;/p&gt;
&lt;h2 id="option-4-zoned-generic-class"&gt;Option 4 -Zoned generic class&lt;/h2&gt;
&lt;p&gt;This option uses a single generic class to add time zone aware datetimes: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt; &lt;span class="n"&gt;Zoned&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;CalendarDate&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;zonedDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Zoned&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The advantage is a single implementation class. &lt;/p&gt;
&lt;p&gt;The disadvantage of this option is that any methods to access fields such as day of week would throw an exception if the precision of the underlying class is not sufficient. &lt;/p&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="" href="/p/threeten/oldwiki/ThreeTen/"&gt;Home page&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stephen Colebourne</dc:creator><pubDate>Thu, 22 May 2014 22:08:11 -0000</pubDate><guid>https://sourceforge.net1e90dea9646bf2dd313ebcaf9ef9ae62784d96af</guid></item></channel></rss>