TimeZone 계산 시간대 및 여름철 처리, 파충류에 사용 가능
시간대가 다르다는 것을 감안하여 우리는 국가가 있는 시간대를 판단하여 미리 뛸 수 있다. 예를 들어 미국 로스앤젤레스, UTC-7, 그러면 런애프터는 서버의 전날 17:00에 미국 로스앤젤레스 사이트의 데이터를 잡을 수 있다. 왜냐하면 이때가 바로 현지의 새벽이기 때문이다.
그리고 스위스, UTC+2(여름철)에 우리는 프로그램이 서버의 02:00 시간에 달려가서 스위스 현지 사이트의 데이터를 잡을 수 있다.
프로그램은 권한을 가지고 완주할 수 있을 뿐만 아니라, 기어오르는 사이트의 자체 성능에도 영향을 주지 않는다.
TimeZone을 사용하여 여름철을 처리할 때 다음 자바 코드
package test;
import java.util.Date;
import java.util.ResourceBundle;
import java.util.TimeZone;
public class TimeZoneHandle {
public static ResourceBundle rb = ResourceBundle.getBundle("timezone");
/*
* use getOffset to handle the daylight saving time. the new Date() give us
* the UTC+0 date,and it is also the server time.
*/
public Date getLocalTime(Job job) {
Date now = new Date();
String country = job.getCountry();
// if the configure file contain the country,we will compute the local
// time.
if (rb.containsKey(country)) {
int crawlerCountryoffset = getCrawlerCountryoffset(country, now);
int serverZoneOffset = TimeZone.getDefault().getOffset(now.getTime());
Date localTime = new Date(now.getTime() - (serverZoneOffset - crawlerCountryoffset));
return localTime;
} else {
return now;
}
}
private int getCrawlerCountryoffset(String country, Date date) {
String timezone_ID = rb.getString(country);
int offset = TimeZone.getTimeZone(timezone_ID).getOffset(date.getTime());
return offset;
}
class Job {
// other fields like Job id
// ...
String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
public static void main(String[] argc) {
TimeZoneHandle timezonehandle=new TimeZoneHandle();
Job job=timezonehandle.new Job();
job.setCountry("SE");
Date d= timezonehandle.getLocalTime( job);
System.out.println(d);
}
}
설정 파일은 src 소스 패키지 아래에 놓입니다
AT= Europe/Vienna
BE= Europe/Brussels
BR= Brazil/East
CA= Canada/Eastern
CH=
CN=
DE= Europe/Berlin
DK= Europe/Copenhagen
ES=
FI=
FR= Europe/Paris
GR=
IE=
IN=
IT=
LU=
NL=
NO=
PT=
SE= Europe/Stockholm
UK= Europe/London
US=
다음은 자바입니다.util.Date,SimpleDateFormat,java.util.Calendar 정리
일.
java.util.Date는 서기 1970년 1월 1일 00:00:00까지의 밀리초 수를 나타내는 시점입니다.그래서 시간대와 Locale 개념이 없어요.
java에서 현재 시점은 다음과 같습니다.
Date now = new Date();//이 시점은 로컬 시스템의 시간대와 무관합니다. 시간대와 무관해서 우리의 저장 데이터 (시간) 가 일치합니다. (시간 일치성)
이.
일반적인 우리는now를 데이터베이스에 저장하고 데이터를 보여야 할 때now를 원하는 형식으로 포맷합니다. 예를 들어 2011-12-04 21:22:24
이 기능은 일반적으로java에 맡긴다.text.DateFormat을 통해 구현할 수 있습니다.예:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String snow = sdf.format(now);
우리는 스노우가 시간(예를 들어 2011-12-04 21:22:24)을 가진 문자열이라는 것을 발견했다. 그러면 2011-12-04 21:22:24는 어느 시간대의 시간입니까?
기본적으로 SimpleDateFormat은 로컬 시스템의 시간대(GMT+8 베이징)를 가져와서 pattern("yyy-MM-dd HH:mm:ss")에 따라 now를 포맷합니다.
이때 출력된 것은 GMT+8구역의 시간이다.국제화 시간을 지원하려면 시간대를 지정한 다음date 데이터를 포맷합니다.
예:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String snow = sdf.format(now);//snow = 2011-12-04 21:22:24
sdf.setTimeZone(TimeZone.getTimeZone("GMT+7"));
String snow2 = sdf.format(now);//snow2 = 2011-12-04 20:22:24 (가시: 동8구가 동7구보다 한 시간 빠르다)
또한 다음 코드를 통해 로컬 시간대 정보를 수정할 수 있습니다.
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
linux 시스템에서 다음 명령을 통해 현재 시간대를 얻을 수 있습니다
date -R
삼.
java.util.Calendar 클래스도 시간점을 대표하지만 Date의facade 도구 클래스로 시간점에서 년, 월, 일, 시, 분, 초, 주 등으로 전환하는 편리한 방법을 많이 제공합니다.
Calendar calendar = Calendar.getInstance(timezone);
Date d = calendar.getTime();
Calendar의 계산도 시간대를 기반으로 한다. 예를 들어 같은date가 동시 구역에 있지 않은 시간수는 다르다.하지만 캘린더.getTime();되돌아오는 날짜는 날짜 형식이기 때문에 시간대가 없습니다.예:
public static void main(String[] args) throws InterruptedException {
Calendar calendar1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
Calendar calendar2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
System.out.println("Millis = "+ calendar1.getTimeInMillis());
System.out.println("Millis = "+ calendar2.getTimeInMillis());
System.out.println("hour = "+ calendar1.get(Calendar.HOUR));
System.out.println("hour = "+ calendar2.get(Calendar.HOUR));
System.out.println("date = "+ calendar1.getTime());
System.out.println("date = "+ calendar2.getTime());
}
출력:
Millis = 1342497217103
Millis = 1342497217104
hour = 11
hour = 4
date = Tue Jul 17 11:53:37 CST 2012
date = Tue Jul 17 11:53:37 CST 2012
참조된 웹 주소:
http://www.cnblogs.com/flying5/archive/2011/12/05/2276578.html
http://blog.163.com/haizai219@126/blog/static/444125552009101924912981/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Alibaba Cloud ECS의 Time Zone, NTP를 둘러 보았습니다.기본 시간대는 Asia/Shanghai이었습니다! Asia/Tokyo 또는 UTC에 설정해 두는 것이 운용상 좋다고 생각합니다. ntp.conf를 보았습니다. aliyun의 NTP 서버를 보러갑니다. 이러한 NTP ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.