标签: timespan

使用 Json.NET 在 Dictionary<string, object> 中序列化时间跨度

我有一个实际上是字典的属性。我在这本字典中保留了很多类型,如 TimeSpans、DateTimes 等。但是序列化和反序列化 TimeSpans 是错误的,它反序列化为字符串。

var dict = new Dictionary<string, object>();
dict.Add("int", 15);
dict.Add("string", "foo");
dict.Add("timeSpan", new TimeSpan(1,1,1));
dict.Add("dateTime", DateTime.Now);

var settings = new JsonSerializerSettings{
    TypeNameHandling = TypeNameHandling.All,
        TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
var serializedObj = JsonConvert.SerializeObject(dict, Newtonsoft.Json.Formatting.Indented, settings);
var deserializedObj = (Dictionary<string, object>)JsonConvert.DeserializeObject(serializedObj, settings);
//Displaying the types with LinqPad:
deserializedObj["int"].GetType().Dump();
deserializedObj["string"].GetType().Dump();
deserializedObj["timeSpan"].GetType().Dump();
deserializedObj["dateTime"].GetType().Dump();
Run Code Online (Sandbox Code Playgroud)

结果: 对象类型

所以对象中的 TimeSpan 不能反序列化为一个时间跨度。我也尝试过最新版本的 Json.Net。但结果是一样的。

如何为 TimeSpan 指定类型名称?或者我应该编写一个自定义转换器以及如何编写?

编辑:

我做了一些测试,并像这样更改了序列化的 timeSpan 属性:

""timeSpan"": {
    ""$type"": ""System.TimeSpan"",
    ""$value"": ""01:01:01""}
Run Code Online (Sandbox Code Playgroud)

这一次 json.net 可以将其反序列化为 TimeSpan。但是如何在序列化级别指定 TimeSpan 的 $type 和 $value …

serialization timespan object json.net deserialization

2
推荐指数
1
解决办法
1839
查看次数

Java 8 中是否存在相当于 .NET Timeout.InfiniteTimeSpan 字段的无限 Duration?

一切都在标题中:Java 8 中是否有一个无限的 Duration 相当于 C# Timeout.InfiniteTimeSpan 字段?

有点像: https://msdn.microsoft.com/en-us/library/system.threading.timeout.infinitetimespan (v=vs.110).aspx

我不认为 -1 ms 在所有 java 库中都被理解为无限的时间跨度,所以这可能更多是一个定义问题。

为了澄清一点上下文,假设我想让一个线程休眠无限长的时间而不执行无限循环,请注意,但这不一定是实际的实际用途。

我只是想知道Java 库中是否有内置的东西?

c# java timespan duration infinite

2
推荐指数
1
解决办法
3777
查看次数

对于符合SQL Server的C#,仅解析时间(分钟:秒.Ms)

我有一个有minutes.seconds.milliseconds的字符串.我需要将其转换为符合SQL Server的类型值TIME.

这是我到目前为止所尝试的,但我仍然得到格式异常

var a = "1.39.26";
        var ab = a.Split('.');
        var minutes = ab[0];
        var seconds = ab[1];
        var ms = ab[2];
        string time =  minutes + ":" + seconds + "." + ms;
        var one = TimeSpan.ParseExact(time, "mm:ss.FF",CultureInfo.InvariantCulture);
        var two = DateTime.ParseExact(time, "mm:ss.FF",
                                 CultureInfo.InvariantCulture
                                 );
Run Code Online (Sandbox Code Playgroud)

也试过了

string time = DateTime.Now.Date.ToString() + minutes + ":" + seconds + "." + ms;
var one = TimeSpan.ParseExact(time, "dd-MM-yyyy mm:ss.FF", CultureInfo.InvariantCulture);
var two = DateTime.ParseExact(time, "dd-MM-yyyy mm:ss.FF", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

c# sql-server timespan

2
推荐指数
1
解决办法
134
查看次数

C# 检查两个时间跨度之间的时间跨度

首先我检查了这个解决方案:

查找当前时间是否在某个时间范围内

并尝试比较像该解决方案那样的时间跨度

public Boolean CalculateDalUren(DateTime datum, TimeSpan? dalStart, TimeSpan? dalEnd)
    {
        Boolean isDal = false;
        TimeSpan timeBetween = datum.TimeOfDay;

        if ((timeBetween >= dalStart))&&(timeBetween < dalEnd)
            {
                isDal = true;
            }
        }
        return isDal;
    }
Run Code Online (Sandbox Code Playgroud)

请注意,dalStart要么是 21:00,要么dalEnd是 23:00,而且几乎总是 07:00。我将 转换DateTimeTimespan.

现在,如果时间跨度例如是 23:00,那么时间会更大或相同,dalStart但因为(这是一个假设)时间更晚,那么dalEnd它仍然会将 if 语句视为 false。02:00 时反之亦然。那么不是更晚dalStart,而是更早dalEnd

我想这是因为我的时间跨度是两天。当日 21:00 至次日 07:00。有解决方法吗?这样我就可以检查时间是否在 21:00 到第二天早上 07:00 之间。

c# timespan

2
推荐指数
1
解决办法
5407
查看次数

如何在 C# 中将 int 值转换为 hh:mm?

我想的int值转换60006:00170017:00在C#。

这是我迄今为止尝试过的:

int val = 600;
TimeSpan result = TimeSpan.FromHours(val);
string fromTimeString = result.ToString("hh':'mm");
Run Code Online (Sandbox Code Playgroud)

如何做到这一点?

c# datetime timespan type-conversion datetime-format

2
推荐指数
1
解决办法
138
查看次数

有没有一种简单的方法可以从TimeSpan中检索开始时间戳

TimeSpan私人领域startTimeStampDateTime.Ticks财产之间有什么区别?是否有一种简单的方法来检索startTimeStamp(不使用反射)?

在此输入图像描述

.net c# datetime timespan

1
推荐指数
1
解决办法
432
查看次数

解析确切的自定义时间格式?

我似乎无法获得适合我的自定义格式TimeSpan.ParseExact():

预期的时间样本:

1:23:45.6
23:45.6
23:45
1:23:45
Run Code Online (Sandbox Code Playgroud)

我正在使用的字符串格式:

string withTenthFormat = @"[%h\:]mm\:ss[\.%f]";
Run Code Online (Sandbox Code Playgroud)

试着有时间和几分之一秒.然而,使用这种格式和CultureInfo.InvariantCulture确实导致a FormatException.我错过了什么?

c# timespan

1
推荐指数
1
解决办法
673
查看次数

如何使用TimeSpan将这种格式"hmmss",例如"00047"的持续时间字符串解析为秒?

请问如何使用TimeSpan将像"00047"这样的简单持续时间字符串解析为秒?

TimeSpan.ParseExact("00047", "hmmss", Nothing).TotalSeconds
Run Code Online (Sandbox Code Playgroud)

上面给出了错误:"输入字符串的格式不正确."

我正在从通话记录中解析持续时间

070615 1815 00047 9    9  806        00000000000       6103  807   80212  15  17           0     0                    
070615 1815 00155 7    9  806        00000000000       2206        41784      22           0     0                    
070615 1816 00249 7    9  806        00000000000       2206        41784      24           0     0   
Run Code Online (Sandbox Code Playgroud)

这是TimeSpan.ParseExact的问题吗?

如果允许我们指定格式,例如hmmss,我们传递一个直接映射到该格式的字符串00047 ...

如果您不尊重有效格式,请问我们格式有什么意义?

vb.net parsing timespan

1
推荐指数
1
解决办法
147
查看次数

使用秒表倒计时

我正在尝试使用秒表进行倒计时,但似乎无法正常工作.为什么这样,我该怎么办?

TimeSpan remainingTime = new TimeSpan(0,0,0,60);
...
remainingTime.Subtract(stopwatch.Elapsed);
Run Code Online (Sandbox Code Playgroud)

剩余时间始终保持不变.

我不能使用计时器,因为其他内部代码的原因,只有秒表.

c# timespan stopwatch countdown

1
推荐指数
1
解决办法
335
查看次数

将AM/PM时间字符串解析为TimeSpan

我正在使用以下内容将时间字符串解析为TimeSpan:

string[] formats = { "hhmm", "hmm", @"hh\:mm", @"h\:mm\:ss", @"h\:mm", "hh:mm tt" };

parseSuccess = TimeSpan.TryParseExact(value, formats, CultureInfo.CurrentCulture, TimeSpanStyles.None, out dtValue);
Run Code Online (Sandbox Code Playgroud)

当我尝试解析像上午9:00,下午5:00这样的值时,返回false.这有什么不对?

c# parsing timespan

1
推荐指数
1
解决办法
1030
查看次数