여러 시간 Zones에서 고객에게 서비스를 제공하는 응용 프로그램의 날짜 및 시간 처리?

StackOverflow https://stackoverflow.com/questions/1285523

문제

문자열 처리와 관련된 국제화 문제는 조언에 따라 거의 해결할 수 있습니다. 유니 코드를 사용하고 모든 것을 데이터베이스에 UTF-8로 저장하면 전 세계 모든 언어를 사용하여 고객에게 서비스를 제공 할 수 있습니다.

그러나 날짜/시간 처리와 관련된 국제화 문제는 어떻습니까?

질문:

  • 시간 처리를 둘러싼 국제화 문제를 해결하기위한 유사한 팔로우하기 쉬운 모범 사례가 있습니까?
  • 애플리케이션이 다른 시간대에서 운영하는 고객에게 서비스를 제공 할 수 있도록하려면 어떻게해야합니까? 어떤 문제가 발생했으며 어떻게 해결 했습니까?
도움이 되었습니까?

해결책

다음과 같은 조언이 있습니다.

  1. 모든 시간을 데이터베이스에 한 번의 시간대, 바람직하게는 Zulu (GMT)로 저장하십시오.
  2. 등록시 각 사용자에게 시간대를 할당하십시오. 우리는 일반적으로 등록 페이지의 언어 나 프로모션 링크에 포함 된 코드에서 이것을 알아냅니다. 때로는 사용자에게 물어봐야합니다.
  3. 고객이 시간대를 인식하게하십시오. 즉, 클라이언트가 서버에서 시간을 표시 할 수 없습니다. 로컬 타임 존과 로컬 형식으로 표시해야합니다.
  4. 클라이언트는 시스템의 시간대 정보를 얻기 위해 약간의 노력을 기울여야합니다. 그렇지 않은 경우 서버는 다양한 데이터에서 추측 할 수 있습니다. 먼저 언어를 사용하여 좋은 결과를 얻은 다음 IP 주소를 사용했습니다. 어쨌든 클라이언트는 영역 정보로 시간을 표시해야하므로 사용자는 시간이 잘못되었을 때 무슨 일이 일어나고 있는지 알 수 있습니다.
  5. 시간대에 영향을받지 않는 특정 시간 값에 대한 특별한 플래그가 필요합니다. 우리는 사용자의 생일이 로케일을 변경할 때 바뀌는 실수가있었습니다. 휴일, 상점 시간 등을 포함 하여이 카테고리에 속하는 다른 것들.
  6. 시계를 서버와 동기화 해야하는 경우 시스템 시간을 변경하지 말고 클라이언트에 델타를 저장하십시오. 시계가 호스트와 동기화되어야한다는 보안 요구 사항이있었습니다. 따라서 클라이언트는 시스템 시계를 시작시 서버와 동기화합니다. 그것은 잘못된 일입니다. 시간대가없는 Windows 95와 같은 이전 시스템의 경우 시간을 GMT로 변경했습니다. 마지막으로 나이가 많은 고객이 사라졌지만 새로운 문제에 직면하고 있습니다. NTP에서 정확한 시간을 엉망으로 만들었습니다.

우리의 실수 중 일부가 당신이 그들을 피하는 데 도움이되기를 바랍니다.

다른 팁

Zzcoder는 몇 가지 좋은 점이 있습니다. 다음은 다음과 같습니다.

  • 모든 DateTime 값에는 관련된 시간대가 있어야합니다. DateTime에 하나가없는 경우 의미를 정의해야합니다 (예 : 경우에 따라 GMT+0을 의미합니다. 다른 경우에는 코드가 파악하고 할당하는 중간에 있기 때문입니다).
  • 데이터 타임이있는 이벤트를 위치에 첨부해야 할 것입니다. 즉, DateTime의 시간대가 변경 될 때 파악할 수있는 방법이 있음을 의미합니다. 이것은 생일이 움직이는 문제를 해결하지만, 일광 절약이 시작되거나 끝나면 지능적인 행동을 허용합니다. 그러나 의도하지 않은 관계에주의하십시오. 다른 시간에 여러 사람을위한 회의를 설정하면 하나의 정식 항목을 참조해야합니다.
  • 하지 마라 직접 계산하십시오 : 항상 언제나 언제나 라이브러리 기능에 DateTime 계산을하도록 요청하십시오.

나는 고객에게 그들의 시간대를 알려 주도록 자바 스크립트를 사용하여 이것에 약간의 운을 가졌습니다. 기억한다면 현지 시간에 사용자의 기계에서 현재 시간을 계산 한 다음 Zulu와 비교하는 것이 포함되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top