/**
 * Convert a timezone format '+HH:mm' to the number of seconds.
 * @param tz
 * @return
 */
function calculateTimezoneOffset(tz) {
    if (tz.substring(0,3) == 'GMT') {
    	tz = tz.substring(3);
    }
    var parts = tz.split(":");
    var minutes = parseInt(parts[1], 10);
    var hours = parts[0].substring(1);
    var sign = parts[0].substring(0, 1) == "+" ? 1 : -1;
    return sign * ((hours * 60 * 60 * 1000) + (minutes * 60 * 1000));
}

/**
 * Get the time in ms, centered on UTC.
 * @param d
 * @param tz
 * @param format
 * @return
 */
function parseTimeDate(d, tz, format) {
	var d_ = null;
	if (format == null) {
		d_ = new Date(d);
		d_ = d_.getTime() + d_.getTimezoneOffset() * 60000;
	} else {
		d_ = Date.parseExact(d, format).getTime();
	}
	return d_ - calculateTimezoneOffset(tz);
}

/**
 * Format the time in ms to a string.
 * @param d
 * @param tz
 * @param format
 * @return
 */
function formatTimeDate(d, tz, format) {
	var d_ = new Date(d + calculateTimezoneOffset(tz) );
	return d_.toString(format);
}

