File: tradition_hour.go

package info (click to toggle)
golang-github-olebedev-when 1.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 488 kB
  • sloc: makefile: 2
file content (63 lines) | stat: -rw-r--r-- 1,544 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package zh

import (
	"regexp"
	"time"

	"github.com/olebedev/when/rules"
)

/*
	子时 23:00 - 01:00
	丑时 01:00 - 03:00
	寅时 03:00 - 05:00
	卯时 05:00 - 07:00
	辰时 07:00 - 09:00
	巳时 09:00 - 11:00
	午时 11:00 - 13:00
	未时 13:00 - 15:00
	申时 15:00 - 17:00
	酉时 17:00 - 19:00
	戌时 19:00 - 21:00
	亥时 21:00 - 23:00
*/

func TraditionHour(s rules.Strategy) rules.Rule {
	return &rules.F{
		RegExp: regexp.MustCompile("" +
			"(?:(子\\s?时|丑\\s?时|寅\\s?时|卯\\s?时|辰\\s?时|巳\\s?时|午\\s?时|未\\s?时|申\\s?时|酉\\s?时|戌\\s?时|亥\\s?时))\\s?" +
			"(?:(一\\s?刻|二\\s?刻|两\\s?刻|三\\s?刻|四\\s?刻|五\\s?刻|六\\s?刻|七\\s?刻|1\\s?刻|2\\s?刻|3\\s?刻|4\\s?刻|5\\s?刻|6\\s?刻|7\\s?刻))?",
		),
		Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) {
			if c.Hour != nil && s != rules.Override {
				return false, nil
			}
			hour, exist := TRADITION_HOUR_WORDS[compressStr(m.Captures[0])]
			if !exist {
				return false, nil
			}
			c.Hour = &hour
			zero := 0
			c.Minute = &zero
			if minute, exist := TRADITION_MINUTE_WORDS[compressStr(m.Captures[1])]; exist {
				if minute > 60 {
					hour := *c.Hour + 1
					c.Hour = &hour
					minute = minute - 60
					c.Minute = &minute
				} else {
					c.Minute = &minute
				}
			}
			return true, nil
		},
	}
}

func compressStr(str string) string {
	if str == "" {
		return ""
	}
	reg := regexp.MustCompile(`\s+`)
	return reg.ReplaceAllString(str, "")
}