timezone全球时区GMT换算,java和c#中转换带缩写时区的时间

发布于 2016-05-23  27.22k 次阅读


目前存在的时区有:
GMT 格林威治标准时间 GMT
UTC 全球标准时间 GMT
ECT 欧洲中部时间 GMT+1:00
EET 东欧时间 GMT+2:00
ART (阿拉伯)埃及标准时间 GMT+2:00
EAT 东非时间 GMT+3:00
MET 中东时间 GMT+3:30
NET 近东时间 GMT+4:00
PLT 巴基斯坦拉合尔时间 GMT+5:00
IST 印度标准时间 GMT+5:30
BST 孟加拉国标准时间 GMT+6:00
VST 越南标准时间 GMT+7:00
CTT 中国台湾时间 GMT+8:00
JST 日本标准时间 GMT+9:00
ACT 澳大利亚中部时间 GMT+9:30
AET 澳大利亚东部时间 GMT+10:00
SST 所罗门标准时间 GMT+11:00
NST 新西兰标准时间 GMT+12:00
MIT 中途岛时间 GMT-11:00
HST 夏威夷标准时间 GMT-10:00
AST 阿拉斯加标准时间 GMT-9:00
PST 太平洋标准时间 GMT-8:00
PNT 菲尼克斯标准时间 GMT-7:00
MST 西部山脉标准时间 GMT-7:00
CST 中部标准时间 GMT-6:00
EST 东部标准时间 GMT-5:00
IET 印第安那东部标准时间 GMT-5:00
PRT 波多黎各和美属维尔京群岛时间 GMT-4:00
CNT 加拿大纽芬兰时间 GMT-3:30
AGT 阿根廷标准时间 GMT-3:00
BET 巴西东部时间 GMT-3:00
CAT 中非时间 GMT-1:00

 

java中转换

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class test {

	public static void main(String[] args) {
		SimpleDateFormat easysdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		 SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yy HH:mm:ss Z", Locale.ENGLISH);
			try {
				System.err.println(easysdf.format(sdf.parse("May-03-16 11:11:11 PDT")));
			} catch (ParseException e) {
				e.printStackTrace();
			}
	}
}

 

c#中是不支持缩写时区转换的,必须转换成UTC偏移量,再格式化,详细参考msdn

https://msdn.microsoft.com/en-us/library/ms973825.aspx


        static void Main(string[] args)
        {
            //Console.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy", new System.Globalization.CultureInfo("en-US")));
           // Console.WriteLine(DateTime.ParseExact("Nov-11-14 08:47:30 PST", "MMM-dd-yyyy hh:mm:ss zzz", new System.Globalization.CultureInfo("en-US")).ToString("yyyy-MM-dd hh:mm:ss"));
            //Console.Read();
            Dictionary<string, string> _timeZones = new Dictionary<string, string>() {{"ECT", "+01:00"},
                {"EET", "+02:00"},
                {"ART", "+02:00"},
                {"EAT", "+03:00"},
                {"MET", "+03:30"},
                {"NET", "+04:00"},
                {"PLT", "+05:00"},
                {"IST", "+05:30"},
                {"BST", "+06:00"},
                {"VST", "+07:00"},
                {"CTT", "+08:00"},
                {"JST", "+09:00"},
                {"ACT", "+09:30"},
                {"AET", "+10:00"},
                {"SST", "+11:00"},
                {"NST", "+12:00"},
                {"MIT", "-11:00"},
                {"HST", "-10:00"},
                {"AST", "-09:00"},
                {"PST", "-08:00"},
                {"PDT", "-07:00"},
                {"PNT", "-07:00"},
                {"MST", "-07:00"},
                {"CST", "-06:00"},
                {"EST", "-05:00"},
                {"IET", "-05:00"},
                {"PRT", "-04:00"},
                {"CNT", "-03:30"},
                {"AGT", "-03:00"},
                {"BET", "-03:00"},
                {"CAT", "-01:00"}
            };

            CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
            string datetimestr = "Nov-11-2014 08:47:30 PST";
            string oldtimezone = datetimestr.Substring(datetimestr.LastIndexOf(" ")+1);//pst
            string returnstr = null;
            _timeZones.TryGetValue(oldtimezone,out returnstr);
            datetimestr = datetimestr.Replace(oldtimezone, returnstr);

            DateTime dt = DateTime.ParseExact(datetimestr, "MMM-dd-yyyy hh:mm:ss zzz", culture);
            Console.WriteLine(dt);
            Console.Read();
        }
    }