c# 数据库存时间戳
时间: 2025-06-05 20:48:33 浏览: 7
### C# 中处理数据库中的时间戳存储
#### 创建时间戳并准备存入数据库
为了在C#应用程序中创建一个合适的时间戳,通常会使用`DateTimeOffset.Now.ToUnixTimeMilliseconds()`来获得当前的毫秒级时间戳。这一步骤确保了无论服务器处于哪个时区,所记录的时间都是基于协调世界时(UTC),从而提高了跨不同地理位置系统的兼容性和一致性[^3]。
```csharp
long currentTimestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
```
#### 设计SQLite表结构以适应时间戳字段
当设计用于保存这些时间戳值的SQLite表格时,建议采用INTEGER类型表示TIME列,因为整数类型的性能优于TEXT,在执行索引查找或数值运算方面具有优势。下面是一个简单的建表语句:
```sql
CREATE TABLE IF NOT EXISTS Events (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Description TEXT NOT NULL,
Timestamp INTEGER NOT NULL -- Unix timestamp in milliseconds
);
```
#### 插入带有时间戳的数据到SQLite数据库
通过ADO.NET连接至SQLite,并利用参数化查询防止SQL注入风险的同时,可以安全高效地向上述定义好的Events表内插入新的事件记录及其对应的时间戳信息。这里展示了一个完整的例子,展示了如何完成这项工作:
```csharp
using (var connection = new SQLiteConnection(connectionString))
{
await connection.OpenAsync();
string insertQuery = @"
INSERT INTO Events (Description, Timestamp)
VALUES (@description, @timestamp)";
using (var command = new SQLiteCommand(insertQuery, connection))
{
command.Parameters.AddWithValue("@description", "Event description");
command.Parameters.AddWithValue("@timestamp", currentTimestamp);
await command.ExecuteNonQueryAsync();
}
}
```
#### 查询和解析已存储的时间戳
一旦数据成功写入到了SQLite数据库里之后,就可以编写相应的SELECT SQL命令去检索特定范围内发生的活动列表。对于读回的结果集而言,则需调用`GetString`方法取得原始字符串形式的时间戳表达式,再进一步转换成更易于理解的形式供前端界面呈现给最终用户查看。注意这里的转换过程应当考虑到目标用户的本地偏好设置以及可能存在的夏令时调整等因素的影响[^1]。
```csharp
using (var reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
long storedTimestamp = Convert.ToInt64(reader["Timestamp"]);
// Converting back to UTC time from unix timestamp
var eventDateUtc = DateTimeOffset.FromUnixTimeMilliseconds(storedTimestamp).UtcDateTime;
Console.WriteLine($"Event occurred at: {eventDateUtc}");
}
}
```
阅读全文
相关推荐

















