标签: timespan

TimeSpan不必要吗?

编辑2009年11月4日

好的,自从我第一次发布这个问题以来已经有一段时间了.在我看来,许多最初的响应者都没能真正得到我所说的 - 一个共同的反应是"你所说的没有任何意义"的一些变化 - 所以我做了一些方便图表真的说明了我的观点.

当我们谈到数字时,我们通常指的是学校儿童学习的等级被称为数字线:

数字线

现在,当我们学习算术时,我们的思想学会对这个概念进行非常有趣的转换.1 + 0.5例如,如果我们只是应用我们的"数字线思维",那么评估表达式将要求我们以某种方式理解这一点:

在数字行上添加两个点

很难真正说明这一点,因为很难想到这一点:"增加"两点.这是许多响应者在添加日期(或者简单地认为它是荒谬的)的想法中挣扎的地方,因为他们认为日期是积分.

然而,这个表达1 + 0.5 确实对我们有意义,因为当我们想到它时,我们真的想象这个:

添加数字(点)和幅度(矢量)

也就是说,数字(或)1加上矢量 0.5,得到 1.5.

或者,我们可能想象这个:

添加两个向量

也就是说,向量 1加上向量 0.5,得到向量 1.5.

换句话说,在处理数字时,我们可以互换地处理点和向量.但是约会怎么样?毕竟,日期基本上是数字.如果您不相信我,请将此行与上面的数字行进行比较:

时间表

注意时间线和数字线之间的对应关系?这就是我的观点:如果我们用数字执行上面的转换,我们也应该能够用日期来完成.所以,应用"时间轴思维",这个表达0001-Jan-02 00:00:00 + 0001-Jan-01 12:00:00并没有多大意义,因为很多响应者指出:

在时间轴上添加两个点

但是,如果我们在每次添加或减去数字时执行相同的概念转换,我们可以轻松地"重新考虑"上述内容:

添加时间点和时间向量

很明显,a DateTime和a 之间的TimeSpan差异与点和矢量之间存在的差异相同.我认为让很多人对我的建议做出负面反应的是,以这种方式将日期视为大小只是感觉如此不自然.但我不认为没有明显的参考点可以用作零.有一个明显的参考点,我会给你一个暗示:大约在2010年前.

不要误解我的意思:我不是在质疑a 和a 的概念之间划分概念的有用性.说真的,我的问题一直以来应该是(为ChrisW间接暗示),为什么我们对待数字和载体互换与普通数字类型打交道?(或者:为什么我们只有一种类型,而不是和?)有一个很大的区别,但是在初中或高中,当我们开始几何时,我们从来没有真正考虑过它.然后它被视为这个新的数学概念,而实际上它是我们一直在利用的东西,因为我们通过用手指计数来学习添加数字.DateTimeTimeSpanintintintspan

最后,最好的答案来自Strilanc,他指出使用DateTimeTimeSpan实际上是仿射空间的实现,它具有不需要参考点作为原点的方便性.谢谢,Strilanc.然而,我给出了ChrisW的接受答案,因为他是第一个提出矢量和点的概念的人,这真正解决了问题的关键.


原始问题(后代)

我当然不是所有行业的编程插孔,但我知道PHP和.NET …

language-agnostic datetime timespan

17
推荐指数
4
解决办法
990
查看次数

TimeSpan配置天数?

看来,ConfigurationElementTimeSpan无法处理超过23:59:59较大的值.有没有解决方法?是继承TimeSpan,并使一个新的TimeSpanValidatorAttribute甚至上班?我需要处理从几分钟到几天的时间跨度.

我正在使用以下配置部分

[ConfigurationProperty("SequenceRolloverDOSCompare", IsRequired = true)]
[TimeSpanValidator(MinValueString = "0:0:00", MaxValueString = 10675199.02:48:05.4775807", ExcludeRange = false)]
public TimeSpan SequenceRolloverDOSCompare
{
    get
    {
        return (TimeSpan)base["SequenceRolloverDOSCompare"];
    }
}
Run Code Online (Sandbox Code Playgroud)

配置看起来像这样:

<SequenceRolloverPolling SequenceRolloverDOSCompare="2:00:00:00"  />
Run Code Online (Sandbox Code Playgroud)

ConfigurationErrorsException : The value of the property 'SequenceRolloverDOSCompare' cannot be parsed. The error is: 2:00:00:00 is not a valid value for TimeSpan.

或这个:

<SequenceRolloverPolling SequenceRolloverDOSCompare="48:00:00"  />
Run Code Online (Sandbox Code Playgroud)

OverflowException : The TimeSpan could not be parsed because at least one of the hours, …

c# timespan configurationsection

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

在TimeSpan上使用String.Format输出完整的秒数而不是毫秒

我想在字符串中显示两个日期之间的经过时间.

假设我有以下代码:

DateTime date1 = DateTime.Now();
System.Threading.Thread.Sleep(2500);
DateTime date2 = DateTime.Now();

TimeSpan elapsed = date2.substract(date1);
Console.WriteLine("> {0:hh:mm:ss}", elapsed);
Run Code Online (Sandbox Code Playgroud)

我期待的是:

> 00:00:03
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

> 00:00:02.5002500
Run Code Online (Sandbox Code Playgroud)

有没有办法使用String.Format函数只返回完整秒?
我还尝试删除小数位:

elapsed = elapsed.Substract(TimeSpan.FromMiliseconds((double)Timespan.Miliseconds);
Run Code Online (Sandbox Code Playgroud)

但是,自从elapsed以来,这都不起作用.Miliseconds返回500作为整数.

c# string.format timespan

17
推荐指数
4
解决办法
3万
查看次数

计算日期之间的分钟差异

我有以下代码:

DateTime pickerDate = Convert.ToDateTime(pickerWakeupDate.SelectedDate);
string enteredStr = pickerDate.ToShortDateString() + " " + textWakeupTime.Text;
string format = "dd/M/yyyy HH:mm";
DateTime enteredDate = DateTime.ParseExact(enteredStr, format, null);
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,我想现在就确定设定日期和日期和时间之间的差异.然后,该值需要为我提供日期之间的分钟数.

我试过用:

DateTime todaysDateTime = DateTime.Now;
TimeSpan span = enteredDate.Subtract(todaysDateTime);
int totalMins = span.Minutes;
Run Code Online (Sandbox Code Playgroud)

但是0当这个值提前10分钟时,这给了我一个不正确的值.

谁能帮我解决这个问题

谢谢.

c# time datetime timespan date

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

如何生成"人类可读"的字符串来表示TimeSpan

我有一个TimeSpan代表客户端连接到我的服务器的时间.我想将其显示TimeSpan给用户.但我不想过于冗长地显示那些信息(例如:2小时3分钟32.2345秒=太详细了!)

例如:如果连接时间是......

> 0 seconds and < 1 minute   ----->  0 Seconds
> 1 minute  and < 1 hour     ----->  0 Minutes, 0 Seconds
> 1 hour    and < 1 day      ----->  0 Hours, 0 Minutes
> 1 day                      ----->  0 Days, 0 Hours
Run Code Online (Sandbox Code Playgroud)

当然,在数字为1(例如:1秒,1分钟,1小时,1天)的情况下,我想使文本单数(例如:1秒,1分钟,1小时,1天) .

无论如何,如果没有一组巨大的if/else子句,可以轻松实现吗?这是我目前正在做的事情.

public string GetReadableTimeSpan(TimeSpan value)
{
    string duration;

    if (value.TotalMinutes < 1)
        duration = value.Seconds + " Seconds";
    else if (value.TotalHours < 1)
        duration = value.Minutes + " Minutes, " …
Run Code Online (Sandbox Code Playgroud)

.net c# timespan string-formatting

17
推荐指数
5
解决办法
9716
查看次数

格式化MVC模型TimeSpan字段

我有一个包含几个时间选择器的MVC页面.它们存储在模型中的对象列表中,可以为空TimeSpan.问题是我将带有秒的打印时间输入到输入字段中.有没有办法格式化这些模型属性,以便我以其他方式打印时间跨度(比如7:00,而不是07:00:00)?毋庸置疑,我的"建议" [DisplayFormat...]没有奏效.至少不是我希望的方式.

输入字段的定义如下:

@Html.TextBoxFor(x => x.Shifts[i].Start)
Run Code Online (Sandbox Code Playgroud)

该模型的相关部分如下:

public class Workshift
{
    [DisplayFormat(Something here perhaps?)]
    public TimeSpan? Start { get; set; }
    public TimeSpan? End { get; set; }
    public TimeSpan? Pause { get; set; }
}

public class TimeRegistrationViewModel
{
    public List<Workshift> Shifts { get; set; }

    ...
}
Run Code Online (Sandbox Code Playgroud)

一如既往地欣赏它!

format asp.net-mvc timespan

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

.Net Core 3.0 TimeSpan 反序列化错误 - 在 .Net 5.0 中修复

我正在使用 .Net Core 3.0 并有以下字符串,我需要用 Newtonsoft.Json 反序列化:

{
    "userId": null,
    "accessToken": null,
    "refreshToken": null,
    "sessionId": null,
    "cookieExpireTimeSpan": {
        "ticks": 0,
        "days": 0,
        "hours": 0,
        "milliseconds": 0,
        "minutes": 0,
        "seconds": 0,
        "totalDays": 0,
        "totalHours": 0,
        "totalMilliseconds": 0,
        "totalMinutes": 0,
        "totalSeconds": 0
    },
    "claims": null,
    "success": false,
    "errors": [
        {
            "code": "Forbidden",
            "description": "Invalid username unknown!"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

并遇到以下错误:

   Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.TimeSpan' because the type requires a JSON primitive value (e.g. …
Run Code Online (Sandbox Code Playgroud)

timespan json.net json-deserialization .net-core .net-core-3.0

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

如何在VB.Net中将ISO 8601持续时间转换为TimeSpan?

是否有标准库方法将具有标准ISO 8601持续时间(也在XSD中用于其duration类型)格式的持续时间的字符串转换为.NET TimeSpan对象?

例如,表示持续时间为1小时的P0DT1H0M0S将转换为New TimeSpan(0,1,0,0,0).

反向转换器确实存在,其工作方式如下:Xml.XmlConvert.ToString(New TimeSpan(0,1,0,0,0))上面的表达式将返回P0DT1H0M0S.

.net xml timespan

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

15
推荐指数
5
解决办法
4万
查看次数

如何在.NET 4.0之前将TimeSpan格式化为字符串

我正在使用.NET 3.5编译C#并尝试将TimeSpan转换为字符串并格式化字符串.我想用

myString = myTimeSpan.ToString("c");

但是在TimeSpan.ToString.NET 4.0和我使用.NET 3.5之前,该方法不会将格式字符串作为参数.

那么你如何将TimeSpan格式化为字符串?我的最终目标是以格式显示TimeSpan,hh:mm:ss但目前正在接收hh:mm:ss:fffffff.

我试过用

myString = string.Format("{0:hh:mm:ss}", myTimeSpan);

但是string.Format只是格式化我的DateTime,并且在尝试格式化TimeSpan时传递不同的格式字符串不起作用.

c# string.format timespan tostring .net-3.5

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