1

这似乎应该是一个没有大脑的人。以下是已知信息。我知道“票”的日期时间。我知道它的时区,因为票的属性之一是它的时区PST/PDT、EST/EDT、CST/CDT、MST/MDT
所以我有TicketTime和TicketTimezone。TicketTime不一定是运行此代码的计算机的本地时间,因此我无法使用LocalTime。Windows应该知道任何给定日期是否为夏令时/夏令时。

我的客户要求我们始终以UTC时间返回。

有了以上这些,应该是孩子们的游戏来实现这一点。但我无法理解,我也没有找到答案。

使用SysUtils、DateUtils;函数ConvertToUTC(LocalDateTime:TDateTime;TimeZoneID:string):TDateTime;无功功率,无功功率TZ:T时区;UTCOffset:TTimeSpan;开始//获取时区信息如果TimeZoneID=“本地”,则TZ:=T时区。本地其他的TZ:=T时区。创建(TimeZoneID);//考虑DST,获取给定本地日期时间的UTC偏移量UTC偏移:=TZ.GetUTC偏移(本地日期时间);//将本地日期时间调整为UTC结果:=LocalDateTime-UTCOffset。总天数;结束;程序测试;无功功率,无功功率本地日期时间,UTCDateTime:TDateTime;TimeZoneID:string;开始//本地日期时间示例LocalDateTime:=dtpLocal。日期时间;//票据日期时间//指定时区ID(例如,“PST/PDT”)时区ID:=“PST/PDT”;//转换为UTCUTCDateTime:=转换为UTC(LocalDateTime,TimeZoneID);//输出结果WriteLn(“本地日期时间:”,DateTimeToStr(LocalDateTime));WriteLn('UTC DateTime:',DateTimeToStr(UTCDateTime));结束;开始测试;结束。

我找到了上面的方法,但在多个地方都失败了。我看过TimeZoneInformation,但看不到如何传入Timezone或偏移量。

我原以为10分钟的剧本会让我像一个在杂草丛中的球。我能写几行吗?

1答案1

重置为默认值
2

这很简单

//将本地日期时间调整为UTC结果:=LocalDateTime-UTCOffset;

=============================================

要详细说明并回答阿米戈杰克的评论:

TTimeSpan是一个具有多个重载运算符的记录,允许您与TDateTime记录交互。

我在这里使用的是

类运算符减法(const Left:TDateTime;Right:TTimeSpan):TDateTime;

这使得我展示的语法完全合法且有意义。

2
  • 所以你认为你可以减法T时间跨度TDateTime(日期时间)? 记住,你发布了一个答案。 评论 6月14日12:16
  • 2
    我当然喜欢@amigojack。TTimespan是一个带有重载运算符的记录,它正是这样做的!
    – Dsm公司
    评论 6月14日20:28

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.