1

我正在使用 c# 为 Invision Board Forum 使用 API。这个想法是应用程序将用于一次发布多个事件,而不是一次只发布一个。

我正在使用 json.net 来构建我的请求,我发布的用户的时区设置为 UTC,我也将事件的日期+时间转换为 UTC。我查看了请求参数,此时的转换是正确的。

事件发布时,时间不正确。例如,本应在 6 月 6 日下午 6 点发布的事件在 6 月 7 日凌晨 3 点发布。

我的问题如下:我不确定时间在什么时候被转换。我应该提一下,日历有一个自动转换器,它会向您显示当地时间的事件,但是正如我之前提到的,我发布的用户的时区设置为 UTC。我也尝试将本地时间设置为 UTC,但我不知道我是否应该知道我们服务器的时区(这将非常困难,因为我们正在使用托管服务)或者缺少什么,所以发布的时间是正确的。

这是我处理日期的片段:

date = Convert.ToDateTime(date1) + time;           
DateTime dateConverted = date.ToUniversalTime();  
string d1=dateConverted.ToString("o", CultureInfo.InvariantCulture);
dt.Rows.Add(d1, events[b]); 
request.AddParameter("calendar", calendarId); 
request.AddParameter("title", row["EVENT"]+ "["+eventName+"]"); 
request.AddParameter("description", eventName);
request.AddParameter("start",row["DATE"]); 

以及 InvisionBoard api 文档的链接: https ://invisioncommunity.com/developers/rest-api?endpoint=calendar/events/POSTindex

谢谢阅读 :)

编辑: 我现在这样建立日期:

DateTime dateF = new DateTime(2020, date.Month, date.Day, time.Hours, time.Minutes,0); 

它给了我一个不同的时间(谢谢jakdep,我和很多人一起解决了这个问题,没有人发现'你为什么要添加时间'的事情)。不过,如果我发布,比如说,上午 11 点,我会将其转换为 UTC,但它会在日历上显示上午 11 点,这是原始时间(在另一个时区),而不是下午 2 点,这是我必须在我的时区看到的: /

4

1 回答 1

1

编辑: 是的,终于可以了。我所做的是转换事件时间和我的本地时间之间的时间,然后转换为 UTC:

DateTime cdateF = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateF,sourceTimeZone, tzone);
DateTime dateConverted = cdateF.ToUniversalTime();

它从我所在的地方获取时区并从那里转换,这就是为什么即使使用 UTC 转换,时间仍然是错误的。现在发布正确的时间:D感谢您的帮助:D

于 2020-06-11T23:19:08.457 回答