velocity-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From apa...@recks.org
Subject Re: DateTool and human-friendly date formats
Date Fri, 28 Apr 2006 09:21:00 GMT
Hi Chris,

this seems to be a classical "view" task. You can put
the code into a tool (possibly a subclass of DateTool);
but you can also accommodate such a thing in a macro.

I have done something similar (OK, not the cleanest approach,
but it works. Part of this could have been done with the
DateTool and NumberTool, but I don't have the ToolboxManager
in my commandline velocity utility...):

## ------------------------------------------------------------------------
## convenience helper tools:
## ------------------------------------------------------------------------
#set( $Integer = 1 )
#set( $Long = $Integer.longValue() )
#set( $cdLimit = $Long.valueOf("640000000") )## example use of Long.class
##
## ------------------------------------------------------------------------
## convenience directive to invoke a method and ignore the return value
## ------------------------------------------------------------------------
#macro( call $foo )#if($foo)#**##end#end
##
## ------------------------------------------------------------------------
## Number stringify helpers
## ------------------------------------------------------------------------
#macro( digits4 $number )#*
   *##set( $id = "$number" )#*         -- access the macro paramter, ensure its a String
   *##set( $id = "0000$id.trim()" )#*  -- prepend the padding, clipping whitespace artefacts
   *##set( $len = $id.length() - 4 )#* -- compute the offset for the rest length
   *#$id.substring($len)##             -- emit the resulting padded string
#end
#macro( digits2 $number )#*
   *##set( $id = "$number" )#*
   *##set( $id = "00$id.trim()" )#*
   *##set( $len = $id.length() - 2 )#*
   *#$id.substring($len)##
#end
##
## ------------------------------------------------------------------------
## Date operations and formatting
## ------------------------------------------------------------------------
#macro( dateStr $d )#*
   *##set( $y = $d.year + 1900 )#*
   *##digits4($y)#digits2($d.month)#digits2($d.date)#digits2($d.hours)#digits2($d.minutes)#digits2($d.seconds)##
#end
##
#macro( addDateDuration $d $duration )##
#set( $d = $Integer.parseInt($duration) )
##duration = $duration = $d
#set( $Y = $Integer.parseInt($startDay.substring(0,4)) - 1900 )
#set( $M = $Integer.parseInt($startDay.substring(4,6)) )
#set( $D = $Integer.parseInt($startDay.substring(6,8)) )
#set( $h = $Integer.parseInt($startTime.substring(0,2)) )
#set( $m = $Integer.parseInt($startTime.substring(2,4)) )
#set( $s = $Integer.parseInt($startTime.substring(4,6)) )
##uncomment for debugging: #digits2($Y)-#digits2($M)-#digits2($D) #digits2($s):#digits2($m):#digits2($s)#**#
#set( $D = $D + ($d / 86400) )
#set( $d = $d - (($d / 86400) * 86400) )
#set( $h = $h + ($d / 3600) )
#set( $d = $d - (($d / 3600) * 3600) )
#set( $m = $m + ($d / 60) )
#set( $d = $d - (($d / 60) * 60) )
#set( $s = $s + $d )
##uncomment for debugging: #digits2($Y)-#digits2($M)-#digits2($D) #digits2($s):#digits2($m):#digits2($s)#**#
#set( $d = $date.clone() )
#call( $d.setTime( $Integer.longValue() ) )
#call( $d.setYear( $Y ) )
#call( $d.setMonth( $M ) )
#call( $d.setDate( $D ) )
#call( $d.setHours( $h ) )
#call( $d.setMinutes( $m ) )
#call( $d.setSeconds( $s ) )
#dateStr( $d )##
#end
##
## ------------------------------------------------------------------------
## Macro to write a text to a file.
## ------------------------------------------------------------------------
#macro( fileWrite $filename $text )
   #set( $out = $Class.newInstance("java.io.FileOutputStream", $filename) )
   #set( $data = $text.getBytes() )
   #call( $out.write($data) )
   #call( $out.close() )
#end
##
## example of a "switch" statement:
#macro( SensorName $productId )#*
   *##if( $productId.startsWith("ASA") )ASAR#*
   *##elseif( $productId.startsWith("ATS") )ATSR#*
   *##elseif( $productId.startsWith("GOM") )GOMOS#*
   *##elseif( $productId.startsWith("MER") )MERIS#*
   *##elseif( $productId.startsWith("MIP") )MIPAS#*
   *##elseif( $productId.startsWith("RA2") )ALTIMETER#*
   *##elseif( $productId.startsWith("SCI") )SCIAMACHY#*
   *##elseif( $productId.startsWith("DOR") )DORIS#*
   *##elseif( $productId.startsWith("MWR") )MICROWAVE#*
   *##else#**#UNKNOWN#*
   *##end##
#end
...
<SensorName>	#SensorName( $productId )#*this comment is needed to avoid the macro gobbling
the EOL*#
...
<TrackNo>	$Integer.parseInt($relativeOrbit)
...
<AcqEndDateTime>	#addDateDuration( "$startDay$startTime" $duration ).000


It's your freedom to setup either a tool or a macro to
assist generating the "view" output you need.

Cheers,
Christoph

Townson, Chris wrote:
> Hi,
> 
> I'm need to write a method which outputs a supplied Date object in a "human-friendly"
format (e.g. "5 minutes ago", "3 hours ago", "4 days ago" etc)
> 
> My initial impulse was to sit down and sub-class DateTool, adding a method that compares
the supplied date to the current date and so on ... 
> 
> ... In the interests of DRY: has anyone here already done anything like this or got tips/tricks?
> 
> Chris
> 
> ********************************************************************************   
> DISCLAIMER: This e-mail is confidential and should not be used by anyone who is
> not the original intended recipient. If you have received this e-mail in error
> please inform the sender and delete it from your mailbox or any other storage
> mechanism. Neither Macmillan Publishers Limited nor any of its agents accept
> liability for any statements made which are clearly the sender's own and not
> expressly made on behalf of Macmillan Publishers Limited or one of its agents.
> Please note that neither Macmillan Publishers Limited nor any of its agents
> accept any responsibility for viruses that may be contained in this e-mail or
> its attachments and it is your responsibility to scan the e-mail and 
> attachments (if any). No contracts may be concluded on behalf of Macmillan 
> Publishers Limited or its agents by means of e-mail communication. Macmillan 
> Publishers Limited Registered in England and Wales with registered number 785998 
> Registered Office Brunel Road, Houndmills, Basingstoke RG21 6XS   
> ********************************************************************************

---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org


Mime
View raw message