GoLang Time Formating and Converting from string

时间:2015-11-06 21:25:16

标签: time go

我是Go的新手,主要在C#工作。我目前正致力于将某些东西用作获取下一班巴士的命令。目前它没有编译,因为我正在努力理解如何在Go中使用time包。

我有一个字符串数组,这些字符串是按照计划的时间格式化的,另一个是分钟的,当它是常规服务时(有很多次这些只是一个例子:

var ScheduledTimes = []string{"06:34", "06:54", "17:09", "17:19"}
var RegularTimes = []string{"05", "50"}

所以我目前正在做的是获取当前时间并通过这样做检查它是否在常规服务中:

func isWithinRegularService(check time.Time) bool {
    RegularStart, err := time.Parse(time.Kitchen, "10:05")
    RegularEnd, err := time.Parse(time.Kitchen, "13:52")
    return check.After(RegularStart) && check.Before(RegularEnd)
}

time := time.Now().UTC().Format("15:04")
if isWithinRegularService(time) { }

如果是常规服务,我会确定需要查看的小时数(即这一小时或下一小时内的下一个服务)

if time.Minutes < 5 && time.Minutes >= 0 {
    RegularTimes[0] = fmt.Sprintf("%s%s", time.Hour+1, RegularTimes[0])
    RegularTimes[1] = fmt.Sprintf("%s%s", time.Hour+1, RegularTimes[1])
    RegularTimes[2] = fmt.Sprintf("%s%s", time.Hour+1, RegularTimes[2])
    RegularTimes[3] = fmt.Sprintf("%s%s", time.Hour+1, RegularTimes[3])
} else {
    RegularTimes[0] = fmt.Sprintf("%s%s", time.Hour, RegularTimes[0])
    RegularTimes[1] = fmt.Sprintf("%s%s", time.Hour, RegularTimes[1])
    RegularTimes[2] = fmt.Sprintf("%s%s", time.Hour, RegularTimes[2])
    RegularTimes[3] = fmt.Sprintf("%s%s", time.Hour, RegularTimes[3])
}

在我将该数组传递给另一个函数之前,给我时间检查

type BusTime struct {
betweenStart string
betweenEnd   string
}

func getBusTime(busTimes []array, iteration int) BusTime {

    var timesToReturn BusTime

    if iteration == busTimes.Count()-1 {
        timesToReturn.betweenStart = busTimes[iteration]
        timesToReturn.betweenEnd = busTimes[0]
    } else {
        timesToReturn.betweenStart = busTimes[iteration]
        timesToReturn.betweenEnd = busTimes[iteration+1]
    }

    return timesToReturn
}

busTimes := getBusTime(quaylinkRegularTimes, i)

最后,我检查所提供的时间是否在比较时间之间:

check.After(start) && check.Before(end)

这是关于这个项目的。如果它不是常规服务,它将完全相同,但跳过确定要查看的小时。

目前这不构建,因为我使用的字符串我应该使用的时间,我希望得到一些指导,一些例子,并纠正如何正确使用时间来实现我想要做的事情。到目前为止,我相信我对这种方式的逻辑是正确的,但是我还是没有把它编译好。

1 个答案:

答案 0 :(得分:4)

由于function generateFaces() { var numberOfFaces = 5; var theLeftSide = document.getElementById("leftSide"); var theRightSide = document.getElementById("rightside"); for (var i = 1; i <= numberOfFaces; i++) { this_img = document.createElement("img"); this_img.src = "http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png"; var topIndex = Math.floor(Math.random() * 401); var leftIndex = Math.floor(Math.random() * 401); this_img.style.top = topIndex + "px"; this_img.style.left = leftIndex + "px"; this_img.style.position = "absolute"; theLeftSide.appendChild(this_img); theLeftimages = document.cloneNode(true); theLeftimages = theLeftimages.removeChild(theLeftimages.lastChild); theRightSide.appendChild(theLeftimages); }; }是一个特定的瞬间,在特定的位置,使用它来获得没有一天或时区的任意时钟时间可能会很尴尬。你真正想要的是从00:00开始的持续时间,所以time.Time更有意义。例如,您甚至可以根据午夜时间的分钟使用自己的类型,但如果您使用time.Duration,则可以更轻松地使用time.Duration来计算您的时间。

这是一个解析时钟时间的示例函数,以及分钟到time.Time

的函数
time.Duration

您还可以使用相同的基础int64类型将其与您自己的类型结合使用,以便您可以轻松地格式化time.Duration并添加自己的方法。如果从ParseTime返回func ParseTime(t string) (time.Duration, error) { var mins, hours int var err error parts := strings.SplitN(t, ":", 2) switch len(parts) { case 1: mins, err = strconv.Atoi(parts[0]) if err != nil { return 0, err } case 2: hours, err = strconv.Atoi(parts[0]) if err != nil { return 0, err } mins, err = strconv.Atoi(parts[1]) if err != nil { return 0, err } default: return 0, fmt.Errorf("invalid time: %s", t) } if mins > 59 || mins < 0 || hours > 23 || hours < 0 { return 0, fmt.Errorf("invalid time: %s", t) } return time.Duration(hours)*time.Hour + time.Duration(mins)*time.Minute, nil } Time更方便,则取决于您。这两个可以直接兑换。

time.Duration

你可以将它们组合起来:http://play.golang.org/p/E679m2wlUO