commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Scholte (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (LANG-379) Calculating A date fragment in any time-unit
Date Thu, 29 Nov 2007 16:08:43 GMT

    [ https://issues.apache.org/jira/browse/LANG-379?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12546780
] 

rfscholte-getthere edited comment on LANG-379 at 11/29/07 8:08 AM:
---------------------------------------------------------------

There are still some small issues to solve. One of them is proper exception handling. This
includes UnsupportedFragmentException (or other logic Exception) and IllegalArgumentException
if date is null. Another exception must be caught when the fragment is smaller then the unit
(or should it return 0?) Like I said: still some enhancements required here.



      was (Author: rfscholte-getthere):
    There are still some small issues to solve. One of them is proper exception handling.
This includes UnsupportedFragmentException (or other logic Exception) and IllegalArgumentException
if date is null. Another exception must be caught when the fragment is smaller then the unit
(or should it return 0?) Like I said: still same enhancements required here.


  
> Calculating A date fragment in any time-unit
> --------------------------------------------
>
>                 Key: LANG-379
>                 URL: https://issues.apache.org/jira/browse/LANG-379
>             Project: Commons Lang
>          Issue Type: New Feature
>    Affects Versions: 2.4
>            Reporter: Robert Scholte
>            Priority: Minor
>         Attachments: DateUtilsFragmentTest.java
>
>
> These DateUtils-features can make it possible to calculate a date-part in any time-unit.
For example: the number of minutes of this year, the number of seconds of today, etc.
> I've started with some coding, and if there's enough interest we can make it more solid.

> public static long getFragmentInSeconds(Date date, int fragment) {
> 		return getFragment(date, fragment, Calendar.SECOND);
> 	}
> 	
> 	public static long getFragmentInMinutes(Date date, int fragment) {
> 		return getFragment(date, fragment, Calendar.MINUTE);
> 	}
> 	
> 	public static long getFragmentInHours(Date date, int fragment) {
> 		return getFragment(date, fragment, Calendar.HOUR_OF_DAY);
> 	}
> 	
> 	public static long getFragmentInDays(Date date, int fragment) {
> 		return getFragment(date, fragment, Calendar.DAY_OF_YEAR);
> 	}
> 	public static long getFragmentInSeconds(Calendar calendar, int fragment) {
> 		return getFragment(calendar, fragment, Calendar.SECOND);
> 	}
> 	
> 	public static long getFragmentInMinutes(Calendar calendar, int fragment) {
> 		return getFragment(calendar, fragment, Calendar.MINUTE);
> 	}
> 	
> 	public static long getFragmentInHours(Calendar calendar, int fragment) {
> 		return getFragment(calendar, fragment, Calendar.HOUR_OF_DAY);
> 	}
> 	
> 	public static long getFragmentInDays(Calendar calendar, int fragment) {
> 		return getFragment(calendar, fragment, Calendar.DAY_OF_YEAR);
> 	}
> 	
> 	private static long getFragment(Date date, int fragment, int unit) {
> 		Calendar calendar = Calendar.getInstance();
> 		calendar.setTime(date);
> 		return getFragment(calendar, fragment, unit);
> 	}
> 	private static long getFragment(Calendar calendar, int fragment, int unit) {
> 		long millisPerUnit = getMillisPerFragment(unit);
> 		long result = 0;
> 		switch (fragment) {
> 		case Calendar.YEAR:
> 			result += (calendar.get(Calendar.DAY_OF_YEAR) * MILLIS_PER_DAY) / millisPerUnit;
> 		case Calendar.MONTH:
> 			result += (calendar.get(Calendar.DAY_OF_MONTH) * MILLIS_PER_DAY) / millisPerUnit;
> 		case Calendar.DAY_OF_YEAR:
> 		case Calendar.DATE:
> 			result += (calendar.get(Calendar.HOUR_OF_DAY) * MILLIS_PER_HOUR) / millisPerUnit;
> 		case Calendar.HOUR_OF_DAY:
> 			result += (calendar.get(Calendar.MINUTE) * MILLIS_PER_MINUTE) / millisPerUnit;
> 		case Calendar.MINUTE:
> 			result += (calendar.get(Calendar.SECOND) * MILLIS_PER_SECOND) / millisPerUnit;
> 		case Calendar.SECOND:
> 			result += (calendar.get(Calendar.MILLISECOND) * 1) / millisPerUnit;
> 		}
> 		return result;
> 	}
> 	
> 	private static long getMillisPerFragment(int fragment) {
> 		long result = Long.MAX_VALUE;
> 		switch (fragment) {
> 		case Calendar.DAY_OF_YEAR:
> 		case Calendar.DATE:
> 			result = MILLIS_PER_DAY;
> 			break;
> 		case Calendar.HOUR_OF_DAY:
> 			result = MILLIS_PER_HOUR;
> 			break;
> 		case Calendar.MINUTE:
> 			result = MILLIS_PER_MINUTE;
> 			break;
> 		case Calendar.SECOND:
> 			result = MILLIS_PER_SECOND;
> 			break;
> 		case Calendar.MILLISECOND:
> 			result = 1;
> 			break;
> 		}
> 		return result;
> 	}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message