import java.util.*;
import java.text.SimpleDateFormat;

public class DateTest {
    public static void main(String[] args) {
        try {
            TimeZone gmtZero = TimeZone.getTimeZone("UTC"); // same as GMT0
            TimeZone gmtPlus10 = TimeZone.getTimeZone("GMT+10");
            TimeZone gmtPlus12 = TimeZone.getTimeZone("GMT+12");
            SimpleDateFormat gmtPlus10Format = new SimpleDateFormat("HH:mm dd/MM/yyyy");
            gmtPlus10Format.setTimeZone(gmtPlus10);
            SimpleDateFormat gmtPlus12Format = new SimpleDateFormat("HH:mm dd/MM/yyyy");
            gmtPlus12Format.setTimeZone(gmtPlus12);
            SimpleDateFormat gmtZeroFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
            gmtZeroFormat.setTimeZone(gmtZero);

            long userTime = gmtPlus10Format.parse("14:30 21/12/2008").getTime(); // user enters time in GMT+10
            System.out.println("userTime millis in GMT+10:                      " + userTime + " - " + gmtPlus10Format.format( new Date(userTime) ));

            /* convert user time to universal time */

            long universalTime = userTime + gmtPlus10.getOffset( userTime       ); // adjust userTime to univeralTime; store this value in the database
            System.out.println("userTime millis in universal time (GMT0):       " + universalTime + " - " + gmtZeroFormat.format( new Date(universalTime) ));

            /* convert universalTime to user time */

            long userTimeInPlus12 = universalTime - gmtPlus12.getOffset( universalTime ); // adjust universalTime to user time (GMT+12)
            System.out.println("userTime millis in GMT+12:                      " + userTimeInPlus12 + " - " + gmtPlus12Format.format( new Date(userTimeInPlus12) ));

            long userTimeInPlus10FromUniversalTime = universalTime - gmtPlus10.getOffset( universalTime ); // adjust universalTime to user time (GMT+10)
            System.out.println("userTime millis from universalTime in GMT+10:   " + userTimeInPlus10FromUniversalTime + " - " + gmtPlus10Format.format( new Date(userTimeInPlus10FromUniversalTime) ));

        }
        catch (Exception e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }
}