The following example shows how you might create a tag converter that converts minutes into a formatted string that shows the number of hours and minutes. For example, given installation of this tag converter, a JSP can include the following tag:

<dsp:valueof param="numMinutes"

If the page parameter numMinutes has a value of 117, this tag converter displays the value as follows:

1 hr 57 mins

import atg.droplet.TagConverter;
import atg.droplet.TagAttributeDescriptor;
import atg.droplet.TagConversionException;
import atg.servlet.DynamoHttpServletRequest;
import java.util.Properties;

//Convert minutes into the format H hr(s) M min(s)

public class MinutesToHoursMinutesConverter implements TagConverter {

  private static final int MINUTES_PER_HOUR = 60;
  static final String ASHOURSANDMINUTES_ATTRIBUTE = "asHoursAndMinutes";
  private static final TagAttributeDescriptor[] S_TAG_ATTRIBUTE_DESCRIPTORS ={
    new TagAttributeDescriptor(
      "If provided, assume input is # of minutes, format as H hr(s) M min(s)", 
      false, true)};
  public String getName() {
    return "minutesToHoursMinutes";

  public TagAttributeDescriptor[] getTagAttributeDescriptors() {

  public Object convertStringToObject(
    DynamoHttpServletRequest request,String string, Properties properties)
      throws TagConversionException {
        throw new TagConversionException("Unable to convert string to object.");

  public String convertObjectToString(
    DynamoHttpServletRequest request, Object pValue, Properties properties)
      throws TagConversionException {
        if(pValue == null){
        return null;
        if (pValue instanceof Integer) {
          return buildOutput(((Integer)pValue).intValue());
        } else {
          return pValue.toString();

  private String buildOutput(int totalMinutes) {
    int hours = (int) Math.floor(totalMinutes / MINUTES_PER_HOUR);
    int minutes = totalMinutes % MINUTES_PER_HOUR;
    return formatOutput(hours, minutes);
  private String formatOutput(int hours, int minutes) {
    StringBuffer buf = new StringBuffer(100);
    if(hours > 0) {
      if(hours == 1) {
        buf.append(" hr");
      } else {
        buf.append(" hrs");
    if(minutes > 0) {
      buf.append(" ").append(minutes);
      if(minutes == 1){
        buf.append(" min");
      } else {
        buf.append(" mins");
    return buf.toString();