annotate pkg/common/time.go @ 5415:4ad68ab239b7 marking-single-beam

Factored creation of default class breaks in SR import to be reused with markings, too.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 07 Jul 2021 12:01:28 +0200
parents b3b990811f2c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
2929
e5f5afa45451 Change basic in/out datetime format to RFC3339
Bernhard Reiter <bernhard@intevation.de>
parents: 2150
diff changeset
7 // Copyright (C) 2018, 2019 by via donau
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
2929
e5f5afa45451 Change basic in/out datetime format to RFC3339
Bernhard Reiter <bernhard@intevation.de>
parents: 2150
diff changeset
13 // * Bernhard E. Reiter <bernhard.reiter@intevation.de>
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 package common
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
3027
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
17 import (
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
18 "math"
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
19 "time"
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
20 )
2929
e5f5afa45451 Change basic in/out datetime format to RFC3339
Bernhard Reiter <bernhard@intevation.de>
parents: 2150
diff changeset
21
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 const (
2929
e5f5afa45451 Change basic in/out datetime format to RFC3339
Bernhard Reiter <bernhard@intevation.de>
parents: 2150
diff changeset
23 // time.RFC3339 equals "simplified ISO format as defined by ECMA-262"
e5f5afa45451 Change basic in/out datetime format to RFC3339
Bernhard Reiter <bernhard@intevation.de>
parents: 2150
diff changeset
24 // https://tc39.github.io/ecma262/#sec-date-time-string-format
e5f5afa45451 Change basic in/out datetime format to RFC3339
Bernhard Reiter <bernhard@intevation.de>
parents: 2150
diff changeset
25 // and "SHOULD be used in new protocols on the Internet." (RFC section 5.6)
4162
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
26
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
27 // TimeFormat is the preferred time format represention in gemma.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
28 TimeFormat = time.RFC3339
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
29 // TimeFormatMicro is the same as TimeFormat but also
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
30 // contains 3 digits for micro seconds.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
31 // This is useful for e.g. times in imports and the
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
32 // respective logs.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
33 TimeFormatMicro = "2006-01-02T15:04:05.999Z07:00"
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
34 // TimeFormatMicroLocal is the same as TimeFormatMicro but
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
35 // w/o the timezone. Only used for tolerant parsing.
4078
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
36 TimeFormatMicroLocal = "2006-01-02T15:04:05.000"
4162
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
37 // DateFormat represents the preferred date format in Gemma.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
38 DateFormat = "2006-01-02"
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 )
3027
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
40
4075
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
41 // TimeParser is a list of time formats.
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
42 type TimeParser []string
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
43
4162
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
44 // ParseTime parses the time formats known to Gemma.
4078
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
45 var ParseTime = TimeParser{
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
46 TimeFormat,
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
47 TimeFormatMicro,
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
48 TimeFormatMicroLocal,
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
49 DateFormat,
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
50 }.Parse
80bdcd137a1d Parse timezones from time inputs and send timezones in results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4075
diff changeset
51
3332
c86a8e70b40f Made time interpolation more precise and added a unit test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3095
diff changeset
52 var utc0 = time.Unix(0, 0)
c86a8e70b40f Made time interpolation more precise and added a unit test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3095
diff changeset
53
4075
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
54 // Parse tries to parse a given string by the entries of the layout
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
55 // list one after another. The first matching time is returned.
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
56 // If no layout matches the last error is returned or time zero
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
57 // if the layout list is empty.
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
58 func (tg TimeParser) Parse(s string) (time.Time, error) {
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
59 var err error
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
60 var t time.Time
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
61 for _, layout := range tg {
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
62 if t, err = time.Parse(layout, s); err == nil {
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
63 break
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
64 }
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
65 }
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
66 return t, err
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
67 }
cb74aa69954e Moved TimeParser to common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3367
diff changeset
68
4162
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
69 // InterpolateTime returns a function that linearly interpolates the
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
70 // time between t1 and t2 for given value m1 to m2.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
71 // If m1 is given to the returned function t1 is returned.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
72 // If m2 is given to the returned function t2 is returned.
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
73 // Values between m1 and m2 will result in the proportional
8c5df0f3562e Made 'golint' and 'staticcheck' happy with common package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4078
diff changeset
74 // time between t1 and t2.
3367
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
75 func InterpolateTime(t1 time.Time, m1 float64, t2 time.Time, m2 float64) func(float64) time.Time {
3027
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
76
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
77 // f(m1) = t1
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
78 // f(m2) = t2
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
79 // t1 = m1*a + b <=> b = t1 - m1*a
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
80 // t2 = m2*a + b
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
81
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
82 // t1 - t2 = a*(m1 - m2)
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
83 // a = (t1-t2)/(m1 - m2) for m1 != m2
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
84
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
85 if m1 == m2 {
3367
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
86 t := t1.Add(t2.Sub(t1) / 2)
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
87 return func(float64) time.Time { return t }
3027
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
88 }
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
89
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
90 a := t1.Sub(t2).Seconds() / (m1 - m2)
3332
c86a8e70b40f Made time interpolation more precise and added a unit test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3095
diff changeset
91 b := t1.Sub(utc0).Seconds() - m1*a
3027
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
92
3367
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
93 return func(m float64) time.Time {
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
94 x := m*a + b
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
95 secs := math.Ceil(x)
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
96 nsecs := math.Ceil((x - secs) * (999999999 + 1))
ecb4baa2be1a Simplified waterlevel classification.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3332
diff changeset
97 return time.Unix(int64(secs), int64(nsecs))
3027
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
98 }
84e6577a474b Fairway availability: More robust time and value interpolations including corner cases. Still TODO: Distribute to classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2929
diff changeset
99 }
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
100
5296
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
101 // MinTime returns the earlier time of a and b.
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
102 func MinTime(a, b time.Time) time.Time {
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
103 if a.Before(b) {
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
104 return a
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
105 }
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
106 return b
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
107 }
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
108
5296
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
109 // MaxTime returns the later time of a and b.
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
110 func MaxTime(a, b time.Time) time.Time {
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
111 if a.After(b) {
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
112 return a
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
113 }
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
114 return b
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
115 }
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
116
5296
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
117 // OrderTime orders the times a and b ascendingly.
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
118 func OrderTime(a, b time.Time) (time.Time, time.Time) {
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
119 if a.Before(b) {
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
120 return a, b
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
121 }
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
122 return b, a
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4162
diff changeset
123 }
5296
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
124
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
125 // Dusk returns the beginning of the day the time t is in.
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
126 func Dusk(t time.Time) time.Time {
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
127 return time.Date(
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
128 t.Year(),
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
129 t.Month(),
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
130 t.Day(),
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
131 0, 0, 0, 0,
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
132 t.Location())
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
133 }
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
134
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
135 // Dawn returns the last time of the day the time t is in.
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
136 func Dawn(t time.Time) time.Time {
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
137 return time.Date(
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
138 t.Year(),
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
139 t.Month(),
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
140 t.Day(),
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
141 23, 59, 59, 999999999,
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
142 t.Location())
b3b990811f2c Moved Dusk and Dawn functions to common time functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
143 }