我有一个实际上是字典的属性。我在这本字典中保留了很多类型,如 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 …
一切都在标题中: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 库中是否有内置的东西?
我有一个有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) 首先我检查了这个解决方案:
并尝试比较像该解决方案那样的时间跨度
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。我将 转换DateTime为Timespan.
现在,如果时间跨度例如是 23:00,那么时间会更大或相同,dalStart但因为(这是一个假设)时间更晚,那么dalEnd它仍然会将 if 语句视为 false。02:00 时反之亦然。那么不是更晚dalStart,而是更早dalEnd。
我想这是因为我的时间跨度是两天。当日 21:00 至次日 07:00。有解决方法吗?这样我就可以检查时间是否在 21:00 到第二天早上 07:00 之间。
我想的int值转换600到06:00并1700以17:00在C#。
这是我迄今为止尝试过的:
int val = 600;
TimeSpan result = TimeSpan.FromHours(val);
string fromTimeString = result.ToString("hh':'mm");
Run Code Online (Sandbox Code Playgroud)
如何做到这一点?
TimeSpan私人领域startTimeStamp和DateTime.Ticks财产之间有什么区别?是否有一种简单的方法来检索startTimeStamp(不使用反射)?

我似乎无法获得适合我的自定义格式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.我错过了什么?
请问如何使用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 ...
如果您不尊重有效格式,请问我们格式有什么意义?
我正在尝试使用秒表进行倒计时,但似乎无法正常工作.为什么这样,我该怎么办?
TimeSpan remainingTime = new TimeSpan(0,0,0,60);
...
remainingTime.Subtract(stopwatch.Elapsed);
Run Code Online (Sandbox Code Playgroud)
剩余时间始终保持不变.
我不能使用计时器,因为其他内部代码的原因,只有秒表.
我正在使用以下内容将时间字符串解析为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.这有什么不对?