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