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

Paul Benedict commented on LANG-379:
------------------------------------

Robert, can you slug out LANG-400 with these enhancements? Sounds very similar.

> 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.3
>            Reporter: Robert Scholte
>            Priority: Minor
>             Fix For: 2.4
>
>         Attachments: DateUtils-fragments.patch, 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.

Reply via email to