C# 创建没有时区同步的每周计划任务

C# 创建没有时区同步的每周计划任务,c#,windows,C#,Windows,我们有一个程序,可以插入每周计划的任务以执行本地备份 该事件是使用类WeeklyTrigger生成的,并插入到windows任务计划程序中。批量注册代码为: var wt = new WeeklyTrigger { DaysOfWeek = weekday, StartBoundary = startDate, Enabled = true }; using (TaskService ts = new TaskService()) { TaskDefinition

我们有一个程序,可以插入每周计划的任务以执行本地备份

该事件是使用类
WeeklyTrigger
生成的,并插入到windows任务计划程序中。批量注册代码为:

var wt = new WeeklyTrigger
{
    DaysOfWeek = weekday,
    StartBoundary = startDate,
    Enabled = true
};
using (TaskService ts = new TaskService())
{
    TaskDefinition td = ts.NewTask();
    td.RegistrationInfo.Description = "Backup";
    td.Triggers.Add(wt);
    td.Actions.Add(Application.ExecutablePath, arg);
    td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
    ts.RootFolder.RegisterTaskDefinition(name, td);
}
这可以正确工作,但会插入已启用选项
跨时区同步
的计划任务,该选项将计划时间设置为UTC。使用此配置,当夏令时开始(或结束)时,任务运行时间不会更新,这将导致与预期运行时间相差1小时

禁用跨时区同步选项可以使用本地时间运行计划任务

编辑,使其更清晰 如果我们在CET夏令时将任务安排在周一10:00,然后在取消夏令时时,设置的时间保持UTC,然后在CET周一09:00开始任务。我们希望避免这种情况,因为用户在一周工作结束时计划备份,而在备份之前或之后一个小时可能会对数据完整性产生巨大影响


是否可以在不使用跨时区同步的情况下以编程方式创建计划任务?是否有一些特定的文档可以检查?

解决方案是直接修改定义任务的XML文本。 这可以使用属性获取/设置


查找有关需要修改的内容的详细信息。

只需使用当地时间即可。时间应始终存储为UTC,然后机器应自动调整时区,而无需您在代码中执行。@jdweng我使用了本地时间,但计划的事件是每周的,当夏令时开始时,保存的时间不会随之改变。我会更新问题,让它更清楚。为什么当地时间会改变?正如我所说,操作系统会自动补偿。UTC时间不变。因此,当您编程一个时间时,它将存储在UTC中。然后,当时区改变时,偏移量改变,本地时间改变,取消了图形用户界面中的时间,这是正确的。@jdweng非常不清楚你的意思。。。当地时间上午9点的某个时间是01:00Z,某个时间是02:00Z。。。您建议如何将这两个值作为UTC存储在单个日期时间字段中?(乔恩·斯基特的书涵盖了更多有趣的案例)@AlexeiLevenkov:操作系统会自动进行转换。输入本地时间时,使用机器时区将日期存储在UTF中。同样地,检索数据是使用机器时区完成的。花点时间储存时间。然后更改机器时区。时间会变的。