首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建LocalTime BsonDatetime对象

创建LocalTime BsonDatetime对象
EN

Stack Overflow用户
提问于 2020-08-05 21:51:30
回答 1查看 146关注 0票数 0

我有一个大型的日志和数据输入程序,它接收具有1个DataRowDataTable对象。DataTable的列数是随机的,列名和类型也是随机的,所以我不能对每个列都有类。使用这些DataColumn,我得到了DataType,并从头开始构建了一个BsonDocument

下面是一个简短的例子

代码语言:javascript
复制
public void ParseData(DataTable table)
{
    // create the document
    var document = new BsonDocument();

    // get the only row in the table
    var row = table.Rows[0];
            
    // for each column we add the property
    foreach (DataColumn column in table.Columns)
    {
        // create an empty value
        BsonValue value = null;

        // current column value
        var columnValue = row[column.ColumnName];

        // set the value based on the datatype
        if (column.DataType == typeof(string)) value = new BsonString(columnValue.ToString());
        else if (column.DataType == typeof(int)) value = new BsonInt32(Convert.ToInt32(columnValue));
        else if (column.DataType == typeof(float)) value = new BsonDouble(Convert.ToDouble(columnValue));
        else if (column.DataType == typeof(double)) value = new BsonDouble(Convert.ToDouble(columnValue));
        else if (column.DataType == typeof(bool)) value = new BsonBoolean(Convert.ToBoolean(columnValue));
        else if (column.DataType == typeof(DateTime)) value = new BsonDateTime(Convert.ToDateTime(columnValue));

        // add the element
        document.Add(new BsonElement(column.ColumnName, value));
    }

    // insert the document in the generic collection
    InsertDocument(document);
}

正如您所看到的,它非常简单。我删除了列表中的许多类型,因为我们有许多自定义类型可能会通过,所以我只保留了基本类型。问题是我不知道如何强制BsonDateTime在集合中另存为本地时间。在对遗留应用程序进行过滤时,它不起作用。我需要将它们保存为本地时间。这在过去从来不是一个问题,但由于90年代早期的那些遗留应用程序仍然需要支持,我必须弄清楚一些东西。

我还需要将它们重新加载为本地时间。如果可以,我会将它们保存为字符串,但我不能,因为因为所有列都是随机的,所以我不知道何时加载特定的BsonString是否真的是一个string,或者它是否是一个DateTime。对于重载,我不能真的作为本地时间重载。我必须重新加载数据库中的确切值。我只控制文档的创建。但我只控制了一小部分C#,Java和C++格式的。剩下的都是遗留的应用程序,这些公司甚至不存在了。

我确实试着修改了系统中的每个日期,以适应世界协调时间,并将日期更改为世界协调时它的存储属性和遗留应用程序的过滤器仍然有效,但所有的.NET,Java和C++应用程序加载了错误的值,而不是书面的值。

有没有一种方法可以像在SQL server中那样直接在MongoDB中禁用特定集合或数据库中的UTC?

EN

回答 1

Stack Overflow用户

发布于 2020-08-05 22:18:09

MongoDB以协调世界时存储时间,不支持时区。您可以存储任何您喜欢的值,但是大多数MongoDB相关软件会将它们解释为UTC时间戳。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63266662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档