c# - 如何使用 LINQQ 或任何其他方法更新数据表中所有行的第一列?

标签 c# datetime datatable timezone

我有一个包含 4 列日期时间、id、消息和状态的数据表。我想用新的日期时间更新日期时间列(更新的日期时间位于不同的时区,从 CST 到 UTC)。首先,我想这样做,就像我将日期时间列存储在列表中,并将列表从 cst 转换为 utc 时区。然后将列表添加到同一个表并重新排列列。但这听起来很愚蠢,所以有什么方法可以用数据表一列的新值更新现有值。

我在其中一篇文章中找到了以下代码,但不确定到底发生了什么。

var rowsToUpdate = 
dt.AsEnumerable().Where(r => r.Field<string>("datetime") == datetime);

foreach(var row in rowsToUpdate)
{
   row.SetField("datetime", utcDate);
}

数据表中的数据采用 CST 时区,但我希望将该时区转换为 UTC 时区并更新表。

List<DateTime> lstCST = new List<DateTime>();
lstCST = datatable.AsEnumerable().Select(r=>r.Field<DateTime>("CSTDatetime")).ToList();
List<DateTime> lstUTC = new List<DateTime>();
DateTime dt = DateTime.Now;

foreach(var v in lstCST )
{
     dt= TimeZoneInfo.ConvertTimeToUtc(v);
     lstUTC.Add(dt);
}

任何人都可以指出我如何做到这一点的正确方向吗?

最佳答案

如果你想更新所有行,你不需要 LINQ,而是 TimeZoneInfo.ConvertTimeToUtc :

TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

foreach (DataRow row in dataTable.Rows)
{
    DateTime cstDateTime = row.Field<DateTime>("CSTDatetime");
    DateTime utcDateTime = TimeZoneInfo.ConvertTimeToUtc(cstDateTime, cstZone);
    row.SetField("CSTDatetime", utcDateTime);
}

关于c# - 如何使用 LINQQ 或任何其他方法更新数据表中所有行的第一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41979747/

相关文章:

c# - C#中如何从DataTable中获取特定列的值

asp.net - 为什么我应该或不应该将数据集、数据表等作为 session 变量存储在 ASP.NET 页面中?

javascript - 在 JavaScript 函数中使用本地 C# 值

Java 8 DateTimeFormatter 忽略毫秒和区域

c# - 文件创建日期时间为不同的文件和时间重复

mysql - SQL 选择每天最早开始日期时间和最晚结束日期时间

c# - 处理应用程序中的不同用户类型

c# - 如何将代码从 Visual Studio 复制到 MS Word,每个突出显示都完全一样?

c# - 如何从 Microsoft Azure 移动服务中的表读取数据并将其放入我的应用程序中?

jquery - 将 img HTML 标签集成到数据表中