Revision: 4895
          http://sourceforge.net/p/vexi/code/4895
Author:   mkpg2
Date:     2016-11-02 01:51:19 +0000 (Wed, 02 Nov 2016)
Log Message:
-----------
Merge changes/improvements from external code branch (eapi copy).

Modified Paths:
--------------
    branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Date.java
    
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Instant.java

Modified: 
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Date.java
===================================================================
--- 
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Date.java    
    2016-10-30 01:43:08 UTC (rev 4894)
+++ 
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Date.java    
    2016-11-02 01:51:19 UTC (rev 4895)
@@ -162,7 +162,7 @@
             vs[index] = value;
         }
        
-        Date newDate(Calendar cal) {
+        public Date newDate(Calendar cal) {
                cal = initCalendar(cal);
                
                int[] parts = new int[partIds.length];
@@ -172,13 +172,13 @@
                return newDateNoCheck(parts);
         }
        
-        Date newDate(int[] parts) throws ValueException{
+        public Date newDate(int[] parts) throws ValueException{
                // conservatively always checking, may skip this test in 
certain situations
                checkValidity(parts); 
                return newDateNoCheck(parts);
        }
         
-       Date newDateNoCheck(int[] parts) {
+        public Date newDateNoCheck(int[] parts) {
                return new Date(this, parts);
        }
        
@@ -279,6 +279,7 @@
 
     static Pattern p = 
Pattern.compile("([0-9]{1,4})((wk)|[q-])?([0-9]{1,2})?(-([0-9]{1,2})( 
([0-9]{1,2})(:([0-9]{1,2}))?)?)?");
     static public Date parseString(String s) throws ValueException{
+       if(s==null) return null;
         Date r = tryParseString(s);
         if(r==null) 
                throw new ValueException("Not a date '" + s + "'");
@@ -529,8 +530,8 @@
     }
     public Scheme getScheme(){ return scheme; }
     
-    private String padZero(int n) { return padZero(""+n); }
-    private String padZero(String s) {
+    static private String padZero(int n) { return padZero(""+n); }
+    static private String padZero(String s) {
         if(s.length()==1) return "0"+s;
        return s;
     }
@@ -555,15 +556,16 @@
                );
        }
     }
-    public Instant asInstant() throws ValueException { return asInstant(null); 
}
-    public Instant asInstant(String timezone) throws ValueException { 
-        if(timezone==null) timezone = "UTC";
-        TimeZone zone = TimeZone.getTimeZone(timezone);
-        Calendar cal = asCalendar();
-        int offset = zone.getOffset(cal.getTimeInMillis());
-        cal.add(Calendar.MILLISECOND, offset);
-        return new Instant(cal.getTimeInMillis()); 
-    }
+    public long asMillisUTC() { return asMillis(TimeZone.getTimeZone("UTC")); }
+    public long asMillis(TimeZone timezone) { 
+       Calendar cal = asCalendar();
+       int offset = timezone.getOffset(cal.getTimeInMillis());
+       cal.add(Calendar.MILLISECOND, offset);
+       return cal.getTimeInMillis();   
+    }    
+    public Instant asInstantUTC() { return new Instant(asMillisUTC()); }
+    public Instant asInstant(String timezone) { return 
asInstant(TimeZone.getTimeZone(timezone)); } 
+    public Instant asInstant(TimeZone timezone) { return new 
Instant(asMillis(timezone)); }
     
     public Date as(String scheme) throws ValueException { return 
as(getScheme(scheme)); }
     public Date as(Scheme scheme2) throws ValueException {
@@ -571,7 +573,7 @@
         return scheme2.newDate(asCalendar());
     }
     
-    private Scheme getSchemeForPart(int partId){
+    static private Scheme getSchemeForPart(int partId){
        switch(partId){
        case PART_YEAR: return SCHEME_Y;
        case PART_MONTH: return SCHEME_YM;
@@ -585,7 +587,7 @@
     }
     
 
-    private int getSuperiorPart(int partId){
+    static private int getSuperiorPart(int partId){
        switch(partId){
        case PART_QUARTER: 
        case PART_MONTH: return PART_YEAR;
@@ -593,6 +595,7 @@
        case PART_HOUR: return PART_DAY;
        case PART_MINUTE: return PART_HOUR;
        case PART_WEEK: return PART_YEAR;
+       case PART_WEEKDAY: return PART_WEEK;
        }
        throw new Error(""+partId);
     }
@@ -606,11 +609,17 @@
         }else{
                // appending a part - changes the scheme
                if(hasPart(getSuperiorPart(part))){
-                       Scheme scheme1 = getSchemeForPart(part);
-                       int[] r = new int[parts.length+1];
-                       System.arraycopy(parts, 0, r, 0, parts.length);
-                       scheme1.setPart(part, r, value);
-                       return scheme1.newDate(r);
+                       if(part==PART_WEEKDAY){
+                               Calendar c = asCalendar();
+                               c.set(Calendar.DAY_OF_WEEK, value);
+                               return SCHEME_YMD.newDate(c);
+                       }else{
+                               Scheme scheme1 = getSchemeForPart(part);
+                               int[] r = new int[parts.length+1];
+                               System.arraycopy(parts, 0, r, 0, parts.length);
+                               scheme1.setPart(part, r, value);
+                               return scheme1.newDate(r);
+                       }
                }
         }
         throw new ValueException("Cannot derive "+scheme.name+" with date part 
"+partName(part)); 
@@ -642,30 +651,38 @@
     
     public Date  addPeriod(int part, int amount) throws ValueException{
         Calendar c = asCalendar();
-        switch(part){
-        case PART_MINUTE:
-            c.add(Calendar.MINUTE, amount);
-            break;
-        case PART_HOUR:
-            c.add(Calendar.HOUR_OF_DAY, amount);
-            break;        
-        case PART_YEAR:
-            c.add(Calendar.YEAR, amount);
-            break;
-        case PART_QUARTER:
-            c.add(Calendar.MONTH, amount*3);
-            break;
-        case PART_MONTH:
-            c.add(Calendar.MONTH, amount);
-            break;
-        case PART_DAY:
-            c.add(Calendar.DAY_OF_MONTH, amount);
-            break;
-        case PART_WEEK:
-            c.add(Calendar.WEEK_OF_YEAR, amount);
-            break;
-        default:
-               throw new ValueException("Cannot add "+partName(part)+" to "+ 
scheme.name);
+        if(hasPart(part)){
+               switch(part){
+               case PART_MINUTE:
+                   c.add(Calendar.MINUTE, amount);
+                   break;
+               case PART_HOUR:
+                   c.add(Calendar.HOUR_OF_DAY, amount);
+                   break;        
+               case PART_YEAR:
+                   c.add(Calendar.YEAR, amount);
+                   break;
+               case PART_QUARTER:
+                   c.add(Calendar.MONTH, amount*3);
+                   break;
+               case PART_MONTH:
+                   c.add(Calendar.MONTH, amount);
+                   break;
+               case PART_DAY:
+                   c.add(Calendar.DAY_OF_MONTH, amount);
+                   break;
+               case PART_WEEK:
+                   c.add(Calendar.WEEK_OF_YEAR, amount);
+                   break;
+               default:
+                       throw new ValueException("Cannot add "+partName(part)+" 
to "+ scheme.name);
+               }
+        }else{
+               if(part==PART_WEEK && hasPart(PART_DAY)){
+                       c.add(Calendar.DAY_OF_MONTH, amount*7);
+               }else{
+                       throw new ValueException("Cannot add "+partName(part)+" 
to "+ scheme.name);     
+               }                                       
         }
         return correct(c, part);
     }

Modified: 
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Instant.java
===================================================================
--- 
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Instant.java 
    2016-10-30 01:43:08 UTC (rev 4894)
+++ 
branches/vexi3/org.vexi-library.value/src/main/java/org/vexi/value/Instant.java 
    2016-11-02 01:51:19 UTC (rev 4895)
@@ -118,7 +118,7 @@
                return r.toString();
        }
     
-    private void formatTime(StringBuffer r, Calendar c){
+    static private void formatTime(StringBuffer r, Calendar c){
        r.append(zeroPad(2,c.get(Calendar.HOUR_OF_DAY)));
        r.append(":");
        r.append(zeroPad(2,c.get(Calendar.MINUTE)));
@@ -166,4 +166,8 @@
 
        public long millis() { return value; }
 
+       
+       @Override public String toString() {
+               return format();
+       }
 }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to