Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time 时间格式化和从字符串转换_Time_Go - Fatal编程技术网

Time 时间格式化和从字符串转换

Time 时间格式化和从字符串转换,time,go,Time,Go,我是个新手,主要在C#工作。我目前正在做的事情,将作为一个命令,以获得下一个总线使用。目前它没有编译,因为我正在努力理解如何在Go中使用time包 我有一个字符串数组,它的格式为计划时间,另一个字符串的格式为常规服务时的分钟(还有很多次,这些只是一个示例: var ScheduledTimes = []string{"06:34", "06:54", "17:09", "17:19"} var RegularTimes = []string{"05", "50"} 因此,我目前正在做的是获取当

我是个新手,主要在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) { }
如果是常规服务,我将确定需要查看的时间(即这一小时或下一小时内的下一次服务)

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

check.After(start) && check.Before(end)
这是关于这个项目的。如果没有定期的服务,它也会做同样的事情,但不确定看什么时间


目前这还没有建立,因为我正在使用字符串,我应该使用时间,我希望得到一些指导,一些例子,以及关于如何正确使用时间来实现我想要做的事情的更正。到目前为止,我相信我的逻辑是正确的,但是我一直在编译它。

因为
time.Time
是一个特定的瞬间,在特定的位置,将其用于没有日期或时区的任意时钟时间可能会很尴尬。您真正想要的是从00:00开始的持续时间,因此
时间。持续时间
更有意义。例如,您甚至可以根据午夜开始的分钟数使用您自己的类型,但如果您使用
time.Duration
您将能够更轻松地用
time.time
组合您的时间

下面是一个示例函数,用于将时钟时间和分钟解析为
time.Duration

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
}

你可以这样组合:

因为
时间。时间是一个特定的瞬间,在一个特定的位置,使用它作为没有日期或时区的任意时钟时间可能会很尴尬。你真正想要的是从00:00开始的持续时间,所以
时间。持续时间
更有意义。你甚至可以使用你自己的类型例如,从午夜开始n分钟,但如果您使用
time.Duration
,您将能够更轻松地用
time.time
组合时间

下面是一个示例函数,用于将时钟时间和分钟解析为
time.Duration

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
}

你可以这样组合:

当你尝试使用时间时,你会遇到什么问题?请给出一个你遇到的问题的最小示例。嗨,我遇到的问题是我不知道如何从字符串转换为时间,我读了一些地方,当他们将字符串解析为时间时,他们都包括日期,其中mine只包含时间。单独使用小时和分钟而不包含日期是不明确的。23:59是在00:01之前还是之后?如果你只想使用小时和分钟,我只会将它们作为整数处理。我认为我的逻辑可以处理23:59和00:01,但无法检查是否会。你如何处理整数?时间是特定位置的纳秒瞬间。您需要的是从00:00开始的持续时间。您可以使用Time.duration,或使用方法创建自己的类型,以直接使用所需格式,从00:00开始仅使用分钟或秒的单个整数。尝试使用时间时有什么问题?请显示最简单的例子就是你遇到的问题。嗨,我遇到的问题是我不知道如何从字符串转换为时间,我读过一些地方,当他们将字符串解析为时间时,他们都包含日期,我的只包含时间。单独使用小时和分钟而不包含日期是不明确的。是23:59之前还是after 00:01?如果你只想用小时和分钟工作,我会把它们当作整数来处理。我想我的逻辑可以处理23:59和00:01,但是还不能检查它。你如何用整数来处理它呢?时间是特定位置的纳秒级瞬间。你本质上要求的是从那时起的持续时间00:00。您可以使用Time.Duration,或使用方法创建自己的类型,以直接使用所需格式,从00:00开始仅使用分钟或秒的单个整数。
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
}
type Time int64

func (t Time) Hours() int {
    return int(time.Duration(t) / time.Hour)
}

func (t Time) Minutes() int {
    return int((time.Duration(t) % time.Hour) / time.Minute)
}

func (t Time) String() string {
    return fmt.Sprintf("%02d:%02d", t.Hours(), t.Minutes())
}