golang 代码 生成 CP56Time2a 格式
CP56Time2a 是一种用于时间戳的格式,通常用于电力系统中的通信协议,例如 IEC 60870-5-104。这个格式包含了年、月、日、小时、分钟、秒和毫秒等信息。
下面是一个用 Go 语言生成 CP56Time2a 格式的示例代码:
package main
import (
"encoding/binary"
"fmt"
"time"
)
// CP56Time2a represents the CP56Time2a format
type CP56Time2a struct {
Millisecond uint16
Minute uint8
Hour uint8
Day uint8
Month uint8
Year uint8
}
// NewCP56Time2a creates a new CP56Time2a from a time.Time object
func NewCP56Time2a(t time.Time) CP56Time2a {
return CP56Time2a{
Millisecond: uint16(t.Nanosecond() / 1e6),
Minute: uint8(t.Minute()),
Hour: uint8(t.Hour()),
Day: uint8(t.Day()),
Month: uint8(t.Month()),
Year: uint8(t.Year() % 100), // CP56Time2a uses two-digit year
}
}
// ToBytes converts the CP56Time2a to a byte slice
func (c CP56Time2a) ToBytes() []byte {
buf := make([]byte, 7)
binary.LittleEndian.PutUint16(buf[0:], c.Millisecond)
buf[2] = c.Minute
buf[3] = c.Hour
buf[4] = c.Day
buf[5] = c.Month
buf[6] = c.Year
return buf
}
func main() {
// Get the current time
now := time.Now()
// Create a new CP56Time2a object
cp56Time := NewCP56Time2a(now)
// Convert to bytes
bytes := cp56Time.ToBytes()
// Print the bytes
fmt.Printf("CP56Time2a bytes: %x\n", bytes)
}
这个代码定义了一个 CP56Time2a
结构体,并提供了一个 NewCP56Time2a
函数来从 time.Time
对象创建 CP56Time2a
对象。然后,通过 ToBytes
方法将 CP56Time2a
对象转换为字节切片。
在 main
函数中,我们获取当前时间,创建一个 CP56Time2a
对象,并将其转换为字节切片,最后打印出这些字节。
注意:CP56Time2a 格式使用小端字节序,因此在将毫秒转换为字节时使用了 binary.LittleEndian
。