Mercurial > gemma
view pkg/common/time.go @ 3827:6028326b88d6 sld-colors
go fmt'ed
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 03 Jul 2019 17:48:47 +0200 |
parents | ecb4baa2be1a |
children | cb74aa69954e |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2018, 2019 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> // * Bernhard E. Reiter <bernhard.reiter@intevation.de> package common import ( "math" "time" ) const ( // time.RFC3339 equals "simplified ISO format as defined by ECMA-262" // https://tc39.github.io/ecma262/#sec-date-time-string-format // and "SHOULD be used in new protocols on the Internet." (RFC section 5.6) TimeFormat = time.RFC3339 DateFormat = "2006-01-02" ) var utc0 = time.Unix(0, 0) func InterpolateTime(t1 time.Time, m1 float64, t2 time.Time, m2 float64) func(float64) time.Time { // f(m1) = t1 // f(m2) = t2 // t1 = m1*a + b <=> b = t1 - m1*a // t2 = m2*a + b // t1 - t2 = a*(m1 - m2) // a = (t1-t2)/(m1 - m2) for m1 != m2 if m1 == m2 { t := t1.Add(t2.Sub(t1) / 2) return func(float64) time.Time { return t } } a := t1.Sub(t2).Seconds() / (m1 - m2) b := t1.Sub(utc0).Seconds() - m1*a return func(m float64) time.Time { x := m*a + b secs := math.Ceil(x) nsecs := math.Ceil((x - secs) * (999999999 + 1)) return time.Unix(int64(secs), int64(nsecs)) } }