使用 API 自动 post 事件,日期和时间不正确
Using an API to auto-post an event, Date and time are incorrect
我正在使用 c# 为 Invision Board 论坛使用 API。这个想法是应用程序将用于一次 post 多个事件,而不是一次只处理一个事件。
我正在使用 json.net 来构建我的请求,我正在 posting 的用户将他们的时区设置为 UTC,并且我也将事件的日期+时间转换为 UTC .我查看了请求参数,此时的转换是正确的。
事件得到 posted 时,时间不正确。例如,本应 post 编辑为 6 月 6 日下午 6 点发生的事件被 post 编辑为 6 月 7 日凌晨 3 点。
我的问题如下:我不确定时间是在哪一点转换的。我应该提到日历有一个自动转换器,它会向您显示您当地时间的事件,但是正如我之前提到的,我 posting 的用户将他们的时区设置为 UTC。我也尝试将本地时间设置为 UTC,但我不知道我是否应该知道我们服务器的时区(这将非常困难,因为我们使用的是托管服务)或者缺少什么时间 posted 是正确的。
这是我处理日期的片段:
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 文档的 link:
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,我向很多人反映了这个问题,但没有人发现 'why are you adding time' 的事情)。
尽管如此,如果我 post,比如说,上午 11 点,我将它转换为 UTC,但它在日历上显示上午 11 点,这是原始时间(在另一个时区),而不是我必须看到的下午 2 点在我的时区:/
编辑:
耶,终于工作了。
我所做的是转换事件时间和我当地时间之间的时间,然后转换为 UTC:
DateTime cdateF = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateF,sourceTimeZone, tzone);
DateTime dateConverted = cdateF.ToUniversalTime();
它是从我所在的地方获取时区并从那里转换的,这就是为什么即使使用 UTC 转换,时间仍然是错误的。
它现在发布正确的时间 :D
感谢您的帮助 :D
我正在使用 c# 为 Invision Board 论坛使用 API。这个想法是应用程序将用于一次 post 多个事件,而不是一次只处理一个事件。
我正在使用 json.net 来构建我的请求,我正在 posting 的用户将他们的时区设置为 UTC,并且我也将事件的日期+时间转换为 UTC .我查看了请求参数,此时的转换是正确的。
事件得到 posted 时,时间不正确。例如,本应 post 编辑为 6 月 6 日下午 6 点发生的事件被 post 编辑为 6 月 7 日凌晨 3 点。
我的问题如下:我不确定时间是在哪一点转换的。我应该提到日历有一个自动转换器,它会向您显示您当地时间的事件,但是正如我之前提到的,我 posting 的用户将他们的时区设置为 UTC。我也尝试将本地时间设置为 UTC,但我不知道我是否应该知道我们服务器的时区(这将非常困难,因为我们使用的是托管服务)或者缺少什么时间 posted 是正确的。
这是我处理日期的片段:
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 文档的 link: 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,我向很多人反映了这个问题,但没有人发现 'why are you adding time' 的事情)。 尽管如此,如果我 post,比如说,上午 11 点,我将它转换为 UTC,但它在日历上显示上午 11 点,这是原始时间(在另一个时区),而不是我必须看到的下午 2 点在我的时区:/
编辑: 耶,终于工作了。 我所做的是转换事件时间和我当地时间之间的时间,然后转换为 UTC:
DateTime cdateF = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateF,sourceTimeZone, tzone);
DateTime dateConverted = cdateF.ToUniversalTime();
它是从我所在的地方获取时区并从那里转换的,这就是为什么即使使用 UTC 转换,时间仍然是错误的。 它现在发布正确的时间 :D 感谢您的帮助 :D