Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除毫秒和区域性不变量?_C# - Fatal编程技术网

C# 如何删除毫秒和区域性不变量?

C# 如何删除毫秒和区域性不变量?,c#,C#,我有一个变量,它是object product的expireydate。到期日的性质如下: public DateTime? ExpiryDate{ get; set; } 日期以以下格式返回: 2020-01-15 11:16:40.6071922 因为我的ExpiryDate的DateTime是可为空的,所以当我尝试以下操作时: var expiry = DateTime.ParseExact(products.ExpiryDate, "yyyy/MM/dd HH:mm:ss&

我有一个变量,它是object product的expireydate。到期日的性质如下:

public DateTime? ExpiryDate{ get; set; }
日期以以下格式返回:

2020-01-15 11:16:40.6071922
因为我的ExpiryDate的DateTime是可为空的,所以当我尝试以下操作时:

var expiry = DateTime.ParseExact(products.ExpiryDate, "yyyy/MM/dd HH:mm:ss", null);
我得到以下错误:

CS8604-DateTime DateTime.ParseExact中参数“s”的可能空引用参数

我可以抑制错误,但这不是我想要做的。是否有任何方法可以删除毫秒而不必转换为字符串。

通常,我使用这样的静态(扩展)方法

public static DateTime IgnoreTimeSpan(this DateTime dateTime, TimeSpan timeSpan)
{
    if (timeSpan == TimeSpan.Zero)
        return dateTime;

    return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}

public static DateTime? IgnoreMilliseconds(this DateTime? dateTime)
{
    if (!dateTime.HasValue) return dateTime;
    return dateTime?.IgnoreTimeSpan(TimeSpan.FromMilliseconds(1000));
}
DateTime? input;
DateTime? output;

input = new DateTime(2019, 9, 9, 10, 10, 10, 765);
output = input.IgnoreMilliseconds(); // output = "09/09/2019 10:10:10"
这样称呼它

public static DateTime IgnoreTimeSpan(this DateTime dateTime, TimeSpan timeSpan)
{
    if (timeSpan == TimeSpan.Zero)
        return dateTime;

    return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}

public static DateTime? IgnoreMilliseconds(this DateTime? dateTime)
{
    if (!dateTime.HasValue) return dateTime;
    return dateTime?.IgnoreTimeSpan(TimeSpan.FromMilliseconds(1000));
}
DateTime? input;
DateTime? output;

input = new DateTime(2019, 9, 9, 10, 10, 10, 765);
output = input.IgnoreMilliseconds(); // output = "09/09/2019 10:10:10"

这将支持您多次重复使用它

以删除毫秒,您可以执行以下操作:

 var expiry = products.ExpiryDate.AddMilliseconds(-products.ExpiryDate.Millisecond);
你写道:

日期以以下格式返回

显然,您有一些方法可以返回日期时间的字符串表示形式。 如果要将字符串转换为DateTime,通常最好使用DateTime.Parse,而不是ParseExact,因为这将接受多种格式的文本,如果使用当前区域性作为格式提供程序,效果更为明显

小步走:

string dateTimeText = "2020-01-15 11:16:40.6071922";
DateTime dateTime = DateTime.Parse(dateTimeText, CultureInfo.CurrentCulture);
DateTime? nullableDateTime = dateTime;
如果您期望文本有时无法解析

DateTime? nullableDateTime;
if (DateTime.TryParse(dateTimeText, out DateTime dateTime))
{
    // text could be parsed
    nullableDateTime = dateTime;
}
else
{
    nullableDateTime = null;
}

您可以创建一个新的日期时间

当需要舍入多个参数时,这是必需的

var date = ExpiryDate.HasValue ? 
    (DateTime?) new DateTime(ExpiryDate.Value.Year, ExpiryDate.Value.Month,
        ExpiryDate.Value.Day, ExpiryDate.Value.Hour, ExpiryDate.Value.Minute, ExpiryDate.Value.Second) 
    : null;

使用构造函数从当前datetime创建一个新的datetime,它需要年、月、日、小时、分钟和秒,但是我不明白为什么需要解析datetime。这已经是一个问题了datetime@Steve因为它有毫秒,我只需要小时、分钟和秒,但这行不应该编译。ParseExact需要一个字符串作为其第一个参数。如果需要删除毫秒,可以执行
dt=dt.addmillizes(-dt.millizes)
我的答案已更新为支持null@avdeveloper.Value可为null添加“?”问题是我的值是以DateTime格式返回的。更精确地说,它们是由AutoFixture生成的。我应该在我的问题中提到这一点,我想:)