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
|
package m3u8
import (
"fmt"
"strings"
"time"
)
const (
dateTimeFormat = time.RFC3339Nano
)
// TimeItem represents EXT-X-PROGRAM-DATE-TIME
type TimeItem struct {
Time time.Time
}
// NewTimeItem parses a text line and returns a *TimeItem
func NewTimeItem(text string) (*TimeItem, error) {
timeString := strings.Replace(text, TimeItemTag+":", "", -1)
t, err := ParseTime(timeString)
if err != nil {
return nil, err
}
return &TimeItem{
Time: t,
}, nil
}
func (ti *TimeItem) String() string {
return fmt.Sprintf("%s:%s", TimeItemTag, ti.Time.Format(dateTimeFormat))
}
// FormatTime returns a string in default m3u8 date time format
func FormatTime(time time.Time) string {
return time.Format(dateTimeFormat)
}
// ParseTime parses a string in default m3u8 date time format
// and returns time.Time
func ParseTime(value string) (time.Time, error) {
layouts := []string{
"2006-01-02T15:04:05.999999999Z0700",
"2006-01-02T15:04:05.999999999Z07:00",
"2006-01-02T15:04:05.999999999Z07",
}
var (
err error
t time.Time
)
for _, layout := range layouts {
if t, err = time.Parse(layout, value); err == nil {
return t, nil
}
}
return t, err
}
|