如何将时间戳 Protobuff 转回我的时区,因为 GitHub 版本的时间戳已被弃用?

huangapple go评论90阅读模式
英文:

How can I make Timestamp Protobuff back to my timezone since the github version of timestamp is deprecated?

问题

好的,以下是翻译好的内容:

好的,我刚刚意识到一个问题,当我使用以下命令生成新的 protobuff 文件时:

protoc my_file.proto --go_out=./

我的 .proto 结构看起来像这样:

message MyRequest {
 google.protobuf.Timestamp my_time = 1;
}

如果我在2021年左右使用 protoc 命令,我会得到:

import timestamp "github.com/golang/protobuf/ptypes/timestamp"

type MyRequest struct {
	MyTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=my_time,json=myTime,proto3" json:"my_time,omitempty"`
}

但现在我会得到:

import timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    
type MyRequest struct {
	MyTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=my_time,json=myTime,proto3" json:"my_time,omitempty"`
}

主要问题是旧的结构以我的时区表示 MyTime,但新的结构将其转换为 UTC+0。有人知道如何解决这个问题吗?

英文:

Alright so I just realized something when I generate new protobuff file using:

protoc my_file.proto --go_out=./

My .proto struct is somehow looks like:

message MyRequest {
 google.protobuf.Timestamp my_time = 1;
}

If I use the protoc command somewhere around in 2021 I would get:

import timestamp "github.com/golang/protobuf/ptypes/timestamp"

type MyRequest struct {
	MyTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=my_time,json=myTime,proto3" json:"my_time,omitempty"`
}

But now I 'll get:

import timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    
type MyRequest struct {
	MyTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=my_time,json=myTime,proto3" json:"my_time,omitempty"`
}

The main problem is that the old struct presents MyTime in my timezone, but the new one converts it to UTC+0. Anyone know how to solve this problem?

答案1

得分: 1

你可以看到这个链接中调用了.UTC()方法。

从那个方法中可以看出,你可以创建一个自定义函数来返回你所在时区的时间。

以下是一个示例:

func ForMyTimeZone(x *timestamppb.Timestamp) time.Time {
	return time.Unix(int64(x.GetSeconds()), int64(x.GetNanos()))
}
英文:

You can see this method is call .UTC() method.

Looking from that method, you can create custom function to return time for your time zone.

this is the example :

func ForMyTimeZone(x *timestamppb.Timestamp) time.Time {
	return time.Unix(int64(x.GetSeconds()), int64(x.GetNanos()))
}

huangapple
  • 本文由 发表于 2022年3月3日 22:10:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/71338570.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定