java GMT 日期转换

格林尼治标准时间(GMT)

由来

  由于 地球轨道并非圆形,其运行速度又随着地球与太阳之间的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。为了要纠正上述的不均匀性,天文学家计算出地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在 格林尼治子午线上的平太阳时称为世界时(UT0),又叫 格林尼治平时(GMT)。

北京时间与GMT时间关系

  GMT是中央时区, 北京在东8区,相差8个小时  所以北京时间=GMT时间+八小时  Greenwich mean time 【天】格林尼治标准时间

格林尼治标准时间是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。 地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC)——由原子钟提供。 自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。


这里以一个例子来说明如何转换为GMT时间。在HTTP 头上使用了GMT时间,如果要设置Last-Modified 参数,如何构造该时间格式呢? 要点如下:

1、可以使用

SimpleDateFormat 
EEE-三位星期

d-天

MMM-月

yyyy-四位年

HH-24小时制消息

mm-分钟

ss-秒

‘GMT’-GMT字符串,别忘了加上单引号

通过该掩码,能完美的构造出HTTP头所需的日期格式。

2、文件修改时间是本地时间,如果要对文件时间进行换算,换成GMT时间,则要加上时区的设置,

sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

代码

String sFile = "c:\\test.jpg";
File file = new File(sFile);

if(file.exists()){
    long lm = file.lastModified(); 
    Calendar cd = Calendar.getInstance();
    cd.setTimeInMillis(lm);                
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    String timeStr = sdf.format(cd.getTime());
    String timeStr = sdf.format(cd.getTime());
    log.debug("lastModify=" + timeStr);    
 }
//...

3、设置Locale.US, 是因为根据机器的本地化设置,输出的是中文,这里只想输出英文, SimpleDateFormat构造函数如下:

SimpleDateFormat(String pattern, Locale locale) 

输出结果:

 lastModify=Thu, 15 Sep 2011 12:13:41 GMT



你可能感兴趣的:(java,c,String,File,calendar)