#!/usr/bin/awk -f

function isleap(year)
{
	return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)
}

function mdays(mon, year)
{
	return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)
}

function gmtime(sec, tm)
{
	tm["year"] = 1970
	while (sec >= (s = 86400 * (365 + isleap(tm["year"])))) {
		tm["year"]++
		sec -= s
	}
	tm["mon"] = 1
	while (sec >= (s = 86400 * mdays(tm["mon"], tm["year"]))) {
		tm["mon"]++
		sec -= s
	}
	tm["mday"] = 1
	while (sec >= (s = 86400)) {
		tm["mday"]++
		sec -= s
	}
	tm["hour"] = 0
	while (sec >= 3600) {
		tm["hour"]++
		sec -= 3600
	}
	tm["min"] = 0
	while (sec >= 60) {
		tm["min"]++
		sec -= 60
	}
	tm["sec"] = sec
}

function localtime(sec, tm,
	tz, h, m)
{
	return gmtime(sec + TZOFFSET, tm)
}

BEGIN {
	"date +%z" | getline tz
	close("date +%z")
	TZOFFSET = substr(tz, 1, 1) substr(tz, 2, 2)*3600 + substr(tz, 4, 2)*60

	print("TZ" tz)

	FS = "\t"
}

NR == 1 {
	for (i = 1; i <= NF; i++)
		name[i] = $i
	next
}

{
	for (i = 1; i <= NF; i++)
		ev[name[i]] = $i

	print("")

	localtime(ev["beg"] + offset, tm)
	printf("%04d-%02d-%02d %02d:%02d\n",
	  tm["year"], tm["mon"], tm["mday"], tm["hour"], tm["min"])
	delete ev["beg"]

	localtime(ev["end"] + offset, tm)
	printf("%04d-%02d-%02d %02d:%02d\n",
	  tm["year"], tm["mon"], tm["mday"], tm["hour"], tm["min"])
	delete ev["end"]

	for (i = 1; i <= NF; i++) {
		if (name[i] in ev && ev[name[i]])
			printf(" %s: %s\n", name[i], ev[name[i]])
	}

	delete ev
}

END {
	print("")
}
