즉, 파이썬의 datetime.utcnow()에 해당하는 것을 찾고 있습니다.Haskell : UTCTime을 초와 밀리 초로 변환하십시오.
밀리 초 (또는 마이크로 초)까지 년, 월 등이 포함 된 n- 튜플로도 좋습니다.
나는 show
을 사용하고 나서 String
값을 구문 분석한다고 생각했지만 더 편리하다고 생각합니다.
즉, 파이썬의 datetime.utcnow()에 해당하는 것을 찾고 있습니다.Haskell : UTCTime을 초와 밀리 초로 변환하십시오.
밀리 초 (또는 마이크로 초)까지 년, 월 등이 포함 된 n- 튜플로도 좋습니다.
나는 show
을 사용하고 나서 String
값을 구문 분석한다고 생각했지만 더 편리하다고 생각합니다.
문자열을 다시 구문 분석하면 하스 켈리시 (Haskellish)가 아니라는 사실을 확실히 알 수 있습니다. Data.Time.LocalTime
에서 내가 사용하는 것
, 피코 초 해상도 당신에게 초를 제공
todSec . localTimeOfDay . utcToLocalTime utc
.
언제부터? 초와 밀리 초? 아마도 여기에 어딘가에 숨어있는 신기원 (시간 0)이있을 것입니다. UTCTime에서 기점을 뺀 다음 NominalDiffTime을 가져온 다음 그 시간에서 초와 밀리 초를 추출합니다. 물론
secondsSince :: UTCTime -> UTCTime -> (Integer, Int)
secondsSince t0 t1 = (i, round $ d * 1000)
where (i, d) = properFraction $ diffUTCTime t1 t0
당신은 아마 T0는 NominalDiffTime을 반환 당신이 Data.Time.Clock.POSIX을 가져 utcTimeToPOSIXSeconds을 사용하는 경우 1/1/1970 (유닉스 시대), 싶어요.
NominalDiffTime은 Fractional과 Num의 인스턴스이며, 모든 일반 숫자 연산자를 조작 할 때 액세스 할 수 있습니다. 산술적 관점 (변환 포함)에서 이것은 몇 초로 간주됩니다.
유닉스는 윤초가 없기 때문에 근본적으로 잘못된 시간을 갖습니다. 몇 년마다 보통 86400 대신에 86401 초가 걸리는 날이있었습니다. 70 년대에이 사실을 알 필요가있는 컴퓨터에 대한 생각은 어리석은 것처럼 보였습니다 (시계는 일반적으로 기계 시계를 컨설팅하는 sysadmin에 의해 설정 됨). Unix time_t는 신기원 이후의 초를 단순히 계산하고 매일 정확하게 86400 초라고 가정합니다. NominalDiffTime은 동일한 가정을하기 때문에 "공칭"입니다.
옳은 일은 자정 이후 날 번호와 초가있는 구조체를 timefield로 만들고 시간 계산 함수가 윤초 테이블을 참조하도록했을 것입니다. 그러나 새로운 윤년 초가 너무나 자주 지정되어 프로그램마다 다른 시간에 실행될 때 다른 결과를 낼 수 있으므로 단점이 있습니다. 또는 하스켈 용어로 표현하자면 "diffUTCTime"은 IO 모나드에서 결과를 반환해야합니다.
관련 항목 : http://stackoverflow.com/questions/4194340/is-there-a-better-way-to-convert-from-utctime-to-epochtime – katrielalex