java Source

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  14 Posts :: 24 Stories :: 8 Comments :: 0 Trackbacks
import java.io.InputStream;
import java.net.Socket;

/**
 * 
 * 
@author ray (justinlei@gmail.com)
 * @date 2009-8-27
 * 
@version 1.0
 
*/
public class TimeUtil {
    
public static final int DEFAULT_PORT = 37;
    
public static final String DEFAULT_HOST = "time-nw.nist.gov";
    
private TimeUtil() {
    };

    
public static long currentTimeMillis(Boolean sync) {
        
if (sync != null && sync.booleanValue() != true)
            
return System.currentTimeMillis();
        
try {
            
return syncCurrentTime();
        } 
catch (Exception e) {
            
return System.currentTimeMillis();
        }
    }

    
public static long syncCurrentTime()  throws Exception {
        
// The time protocol sets the epoch at 1900,
        
// the java Date class at 1970. This number
        
// converts between them.
        long differenceBetweenEpochs = 2208988800L;

        
// If you'd rather not use the magic number uncomment
        
// the following section which calculates it directly.

        
/*
         * TimeZone gmt = TimeZone.getTimeZone("GMT"); Calendar epoch1900 =
         * Calendar.getInstance(gmt); epoch1900.set(1900, 01, 01, 00, 00, 00);
         * long epoch1900ms = epoch1900.getTime().getTime(); Calendar epoch1970
         * = Calendar.getInstance(gmt); epoch1970.set(1970, 01, 01, 00, 00, 00);
         * long epoch1970ms = epoch1970.getTime().getTime();
         * 
         * long differenceInMS = epoch1970ms - epoch1900ms; long
         * differenceBetweenEpochs = differenceInMS/1000;
         
*/

        InputStream raw 
= null;
        
try {
            Socket theSocket 
= new Socket(DEFAULT_HOST, DEFAULT_PORT);
            raw 
= theSocket.getInputStream();

            
long secondsSince1900 = 0;
            
for (int i = 0; i < 4; i++) {
                secondsSince1900 
= (secondsSince1900 << 8| raw.read();
            }
            
if (raw != null)
                raw.close();
            
long secondsSince1970 = secondsSince1900 - differenceBetweenEpochs;
            
long msSince1970 = secondsSince1970 * 1000;
            
return msSince1970;
        } 
catch (Exception e) {
            
throw new Exception(e);
        }
    }
}
posted on 2011-12-04 02:54 JustinLei 阅读(1630) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: