使用 C# 客户端获取 timestamp() 值
Getting timestamp() value using C# client
只是一个快速的,当我使用
查询节点时,我有一个节点使用 timestamp() 的值获取一个值集
public List<Thing> ListThings()
{
return client.Cypher
.Match("(thing:Thing)")
.Return<Thing>("thing").Results.ToList();
}
我有一个 class 看起来像这样的东西:
public class Thing{
public string name {get; set;}
public int id {get;set;}
public DateTimeOffset timestamp{get;set}
}
我们使用以下方法提前创建 'thing':
Create(thing:Thing{id:6,name:'thing1', timestamp:timestamp()}) return thing
从我的脚本调用时,我得到了除时间戳之外的所有值,这有点烦人,有什么想法吗?我在 Neo4j 浏览器中使用查询返回了所有值,所以我想知道我是否真的做错了什么?
谢谢
如果你去 Neo4j 控制台,只是 运行 RETURN timestamp()
,你会看到结果是一个像 1440468541547 这样的数字。它不能被反序列化为 DateTimeOffset
,特别是因为没有偏移分量。您需要在 C# 中使用不同的类型:可能是 long
,或者可能是 DateTime
.
Tatham 是对的,timestamp()
returns 不能转换为 DateTimeOffset
或 DateTime
的多头。问题之一是返回值是自 1970 年 1 月 1 日以来的毫秒数,因此您需要计算,不幸的是,JSON.Net 无法自动执行此操作。
如果你可以改变你的 Thing
class 你可以有一个 属性 没有序列化但由 Timestamp
属性,像这样:
public class Thing
{
private static DateTime _epoch = new DateTime(1970, 1, 1);
public string id { get; set; }
public string name { get; set; }
private long _ts;
public long timestamp
{
get { return _ts; }
set
{
_ts = value;
TimestampAsDateTime = _epoch.AddMilliseconds(_ts);
}
}
[JsonIgnore]
public DateTime TimestampAsDateTime { get; set; }
}
TimestampAsDateTime
属性 只会在您的代码中可用。
感谢您的出色回答,您解决了问题,但我使用的是一个(对我而言)略微被忽视的解决方案。
由于 timestamp() 的数据类型很长,我将 return 来自服务。我们有能力使用客户端内置的 Date 对象完美地处理这个问题。
这是我的一个错误,我错误地认为时间戳应该是 DateTime,但后来我得到了一个关于它的错误并且被建议使用 DateTimeOffset,我确实这样做了,从来没有真正考虑过 long 作为一个选项。
请记住我是MSSQL出身,有些东西虽然容易做,但换个角度去把握。
谢谢你们,感谢您花时间提供帮助。
只是一个快速的,当我使用
查询节点时,我有一个节点使用 timestamp() 的值获取一个值集public List<Thing> ListThings()
{
return client.Cypher
.Match("(thing:Thing)")
.Return<Thing>("thing").Results.ToList();
}
我有一个 class 看起来像这样的东西:
public class Thing{
public string name {get; set;}
public int id {get;set;}
public DateTimeOffset timestamp{get;set}
}
我们使用以下方法提前创建 'thing':
Create(thing:Thing{id:6,name:'thing1', timestamp:timestamp()}) return thing
从我的脚本调用时,我得到了除时间戳之外的所有值,这有点烦人,有什么想法吗?我在 Neo4j 浏览器中使用查询返回了所有值,所以我想知道我是否真的做错了什么?
谢谢
如果你去 Neo4j 控制台,只是 运行 RETURN timestamp()
,你会看到结果是一个像 1440468541547 这样的数字。它不能被反序列化为 DateTimeOffset
,特别是因为没有偏移分量。您需要在 C# 中使用不同的类型:可能是 long
,或者可能是 DateTime
.
Tatham 是对的,timestamp()
returns 不能转换为 DateTimeOffset
或 DateTime
的多头。问题之一是返回值是自 1970 年 1 月 1 日以来的毫秒数,因此您需要计算,不幸的是,JSON.Net 无法自动执行此操作。
如果你可以改变你的 Thing
class 你可以有一个 属性 没有序列化但由 Timestamp
属性,像这样:
public class Thing
{
private static DateTime _epoch = new DateTime(1970, 1, 1);
public string id { get; set; }
public string name { get; set; }
private long _ts;
public long timestamp
{
get { return _ts; }
set
{
_ts = value;
TimestampAsDateTime = _epoch.AddMilliseconds(_ts);
}
}
[JsonIgnore]
public DateTime TimestampAsDateTime { get; set; }
}
TimestampAsDateTime
属性 只会在您的代码中可用。
感谢您的出色回答,您解决了问题,但我使用的是一个(对我而言)略微被忽视的解决方案。 由于 timestamp() 的数据类型很长,我将 return 来自服务。我们有能力使用客户端内置的 Date 对象完美地处理这个问题。
这是我的一个错误,我错误地认为时间戳应该是 DateTime,但后来我得到了一个关于它的错误并且被建议使用 DateTimeOffset,我确实这样做了,从来没有真正考虑过 long 作为一个选项。
请记住我是MSSQL出身,有些东西虽然容易做,但换个角度去把握。
谢谢你们,感谢您花时间提供帮助。