2017-06-12 1 views
1

次のコードを使用して、年、月、日の変数で指定された日に中部ヨーロッパで夏時間が使用されているかどうかを調べます。私のPC(Ubuntuの16.04)でDebianは夏時間を考慮していませんR

timeString = paste(toString(year), formatC(month, width = 2, flag="0"), formatC(day, width = 2, flag="0"), "12", sep = "-") 
time = strptime(timeString, format = "%Y-%m-%d-%H") 
diff = as.numeric(as.POSIXct(time, tz="UTC") - as.POSIXct(time, tz="Europe/Prague")) 

サマータイムが、1 otherviseアクティブですが、Debianの8.8を使用してサーバー上では、すべての場合において1であるとき、diffは2です。 Ubuntuとして動作するようにサーバーを設定する方法を知っていますか?ありがとう。

アップデート:Debianの時刻設定を変更すると、crontabに使用される時間も変更されるため、これは望ましくありません。数分ごとに動作するRスクリプトをいくつか実行するので、新しい設定でRを再実行するのは危険なようです。あなたは夏時間が使用されているかどうかを確認したい場合は、単に行うことができ、すべての

DaylightSaving = function(year, month, day) { 
     # years 2010-2030 
     if (year < 2010 || year > 2030) { 
     stop("The function is implemented now only for years 2010-2030") 
     } 
     dayStart = c(28, 27, 25, 31, 30, 29, 27, 26, 25, 31, 29, 28, 27, 26, 
    31, 30, 29, 28, 26, 25, 31) 
     dayEnd = c(31, 30, 28, 27, 26, 25, 30, 29, 28, 27, 25, 31, 30, 29, 
    27, 26, 25, 31, 29, 28, 27) 
     if (month < 3 || month > 10) { 
     return(FALSE) 
     } else if (month == 3 && day < dayStart[year - 2009]) { 
     return(FALSE) 
     } else if (month == 10 && day >= dayEnd[year - 2009]) { 
     return(FALSE) 
     } 
     return(TRUE) 
    } 
+1

あなたは両方のシステムが同じタイムゾーンの設定を持っているかどうかを確認するために時間がかかりました:

unix.stackexchange.comに類似した質問がありますか? –

答えて

0

まず、::

#Make a test date 
atime <- as.POSIXct("2017-05-23 13:25", 
        tz = "Europe/Prague") 
#test for DST 
as.POSIXlt(atime)$isdst > 0 

POSIXltだから私はRの関数の形で「醜い」ソリューションを選択しましたクラスは内部的に、夏時間がアクティブでない場合は0の要素isdstのリストを持ち、その情報が利用可能でない場合は肯定、その情報が利用できない場合は否定のリストです。 (?DateTimeClasses参照)。

私はまた、タイムゾーンのヘルプページから、以下の点を指摘したいと思います:

注意を置き換える場合を除いて、タイムゾーンの操作はOS サービスであり、そしてどこまでもサードを交換していることパーティのデータベースが使用され、 を更新できます(「タイムゾーン名」のセクションを参照)。不適切な の結果はRの問題になることはありませんので、 の礼儀でRを責めないようにしてください。

問題はRではありませんが、Debianのインストールではサマータイムは無視されます。これを解決するには、Rをオプション--with-internal-tzcodeで設定して、独自のタイムゾーンデータベースを使用します。しかし、これは通常、あなたのDebianのタイムゾーンシステムが正しく設定されている場合は必要ありません。 Rの設定方法に関する詳細は、ヘルプページ?timezonesInstallation and Administration manual - appendix Bにあります。

これを解決する最善の方法は、Debianインストールで夏時間が正しく処理されるようにすることです。まず、tzdata packageのバージョンが正しいかどうかをチェックすることから始めます。

https://unix.stackexchange.com/questions/274878/system-disregards-daylight-saving-time

+0

Jorisさん、Debianサーバーのシステム管理者のための仕事です。彼は現在多くの仕事をしていますが、夏時間の変更前に9月に解決すると約束しています。 – Lukas

関連する問題