일광절약시간 적용된 서버에서 UTC 타임을 구할려고 합니다.

dcmru의 이미지

제목대로 일광절약시간이 적용되어 있을 시 time() 함수를 이용하여 로컬시간을 구한 다음

이 값으로 UTC 타임을 구할려고 합니다.

정확하게는 제가 임의로 계산한 날짜수를 가지고 있습니다. 이값은 1970년 1월 1일부터

오늘까지의 경과된 날짜수를 계산한 것입니다. 이값과 서버에서 구한 시간(날짜)을 비교할려는 것입니다.

지금 쓰고 있는 방법은 time(NULL); 을 구한 다음 tzset() 함수를 부른 후 timezone 값을

빼주고 있습니다. 이 timezone 라는 값은 UTC와의 시간차를 초로 계산되어 있는 값입니다.

그런데 문제가 되는 것이 일광절약시간이 적용되어 있을 때 00시에 시간을 구하면 다시 말해

1시간이 모자라는 값이 구해져, 전날이 되어버립니다. 그렇다면 이 때는 timezone에서 한시간을

덜 빼던 덜 더하는 방법을 써야할 것 같은데, 이 일광절약시간이 적용되어 있나 안되어 있나를

체크를 해야되는 것이죠. tzset() 를 부르면 daylight 값이 세팅이 되는데, man 에 의한 설명으론

일광절약시간이 적용되어 있으면 0 이 아닌 값을 적용되어 있지 않으면 0 이 세팅되다고 합니다.

하여 테스트를 해보니 시간대는 PST, PDT로 하였습니다. 7월달은 일광절약시간 적용이 되어

daylight 값이 1인데, 시간을 12월달로 바꿔도 daylight 값이 1로 되어 있습니다.

하여 결론은 이 일광절약시간이 적용되어 있는지 아닌지 알 수 있는 방법이 있는가하는 것입니다.

유동적으로 값이 바뀌는 플래그가 있는가하는 것입니다. tm구조체의 int tm_isdst; 가 그런 역할을 하는지요?

위의 설명에 오류가 있으면 알려주세요. 아니면 다른 방법이 있는건가요?

익명 사용자의 이미지

tm_isdst는 현재 tm구조체가 표현하는 시간이 dst구간내에 포함되어 있는가를 정확히 알려줍니다. 그런데 utc는 gmtime(_r)을 이용해서 바로 구할수가 있는데 굳이 그러한 방법까지 쓸 필요가 있을까요?

dcmru의 이미지

설명이 부족했나봅니다.

정확하게는 1970년 1월 1일 이후로 오늘까지 경과된 날짜수를 구할려고 합니다.

time(NULL); 로 초단위의 시간을 구하여 60*60*24 로 나누면 날짜수가 나오죠.

그런데 time 함수가 일광절약시간에 영향을 받는 것 같습니다.

이 일광절약시간이 적용중이거나 아닐 때에 같은 날짜수를 구할려고 하는 것입니다.
----------------
노력만이 살길이다.

노력만이 살길이다.

익명 사용자의 이미지

time() 함수는 timezone 및 dst에 영향을 받지 않습니다. 하지만 60*60*24로 나눌경우 dst start day, end day에 문제가 발생할 소지가 생겨서 dst에 영향을 받는걸로 보일수 있습니다. dst start day는 하루가 23시간, dst end day는 하루가 25시간이 되죠. 이부분만 주의해서 프로그램 해보시면 될것으로 보입니다.
제 코드를 검색해 보니 저는 달력 형태로 오늘까지의 날짜수를 계산하더군요. 참고 하시기 바랍니다.

dcmru의 이미지

검색력이 딸리나 봅니다. 검색을 해봐도 잘 안찾아집니다. 익명으로 로그인을 하셔서 id 로 찾을 수가 없네요.

추가로 제 영어 실력이 모자랐나봅니다. man을 다시 보고 알았는데, daylight 는 일광절약시간 룰이 있으면 0 이 아닌 값을 가지는군요.

나라마다 일광절약시간 적용일이 다를 수가 있으니, localtime 함수로 시간을 알아내어 tm_isdst 로 플래그 검사를 한 후 일광절약시간이 적용되어 있으면 1 시간을 덜빼면 되겠군요.

아니면 TZ 환경설정을 UTC 에 해당하는 것을 바꾼 후 putenv 하여 시간을 구하는 방법은 어떤가요?

테스트해봐야겠습니다.

----------------
노력만이 살길이다.

노력만이 살길이다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.