on *:TEXT:!time*:#:tzone $2 $chan
alias tzone {
var %w = -12&-11&-10&-10&-10&-9&-9&-8&-8&-7&-7&-6&-6&-5&-5&-4&-3.5&-3&-2.5&-2&-1&+12&+12&11.5&+11&+10.5&+10&+10&+9.5&+9&+9&+8&+8+8&&+7&+4&+3&+3&+3&+3&+2&+2&+2&+1&+1&+1&+1&+1&+1&0&0&0&0
var %x = IDLW NT HST CAT AHST YST AKST PST AKDT PDT MST MDT CST EST CDT AST NST ADT NDT AT WAT IDLE NZST NFT AEDT ACDT AEST GST ACST AWDT JST AWST CCT WST CXT MSD MSK BT EEDT EEST EET CEDT CEST CET DST BST IST WEDT WEST WET UTC UT GMT
var %y = International Date Line West.Nome.Hawaii Standard.Central Alaska.Alaska-Hawaii Standard.Yukon Standard.Alaska Standard.Pacific Standard.Alaska Daylight.Pacific Daylight.Mountain Standard.Mountain Daylight.Central Standard.Eastern Standard.Central Daylight.Atlantic Standard.Newfoundland Standard.Atlantic Daylight.Newfoundland Daylight.Azores.West Africa.International Date Line East.New Zealand Standard.Norfolk Island.Australian Eastern Daylight.Australian Central Daylight.Australian Eastern Standard.Guam Standard.Australia Central Standard.Australian Western Daylight Time.Japan Standard.Australian Western Standard.China Coast.Western Standard.Christmas Island.Moscow Daylight.Moscow Standard.Baghdad.Eastern European Daylight.Eastern European Summer.Eastern European.Central European Daylight.Central European Summer.Central European.Daylight Saving.British Summer.Irish Summer.Western European Daylight.Western European Summer.Western European.Universal Co-ordinated.Universal.Greenwich Mean
if (!$istok(%x,$alpha($1),32)) { $iif(!$isin($left($1,1),+ -),.msg $2 Unknown Timezone Format - Defaulting to GMT..) | tokenize 32 $+(GMT,$iif($isin($left($1,1),+ -),$1,$+($v1,$gettok($1,2,$asc($v1))))) $2 }
var %zone = $gettok(%y,$findtok(%x,$alpha($1),1,32),46), %gmt = $iif($calc($gettok(%w,$findtok(%x,$alpha($1),1,32),38) $iif($isin($1,+ -),$v1 $gettok($1,2,$asc($v1)))) > -1,$+($chr(43),$v1),$v1)
var %time = $calc($gmt $left(%gmt,1) (($remove($gettok(%gmt,1,46),$chr(43),$chr(45)) * 60 * 60) + $iif($numtok(%gmt,46),$calc(60 * $+($chr(46),$gettok(%gmt,2,46)))) * 60)) )
$iif($2,.msg $2,echo -a) $1 $+($chr(91),$addtok(%zone,Time,32),$chr(93)) $asctime(%time,HH:nn) @ $asctime(%time,ddd ddoo mmm) $iif($alpha($1) != GMT,$+($chr(91),GMT %gmt,$chr(93)))
}
alias -l isin { var %n = $numtok($2-,32) | while (%n) { if ($gettok($2-,%n,32) isin $1) { return $v1 } | dec %n } }
alias -l alpha { var %a = $len($1), %b = 1, %z | while (%b <= %a) { var %v = $mid($1,%b,1) | if (%v !isalpha) { return %z } | var %z = $+(%z,$mid($1,%b,1)) | inc %b } | return $1 }