Mercurial > gemma
view pkg/common/time.go @ 3705:7006b92c0334
Handle updates (vs. historized and new versions) separately.
We need this distinction as updated data currently can not be
reviewed. More precisely: it can not be declined after review, as the
old data is updated in place.
The current exclusion from the review is a workaround and not meant to
be the final solution. Note that there are additional minor problems,
like the fact that the updated data is not counted as changed data for
the import.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Wed, 19 Jun 2019 17:00:08 +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)) } }