将datetime-format从RFC1123转换为DateTime-Object

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将datetime-format从RFC1123转换为DateTime-Object相关的知识,希望对你有一定的参考价值。

我正在将RFC 1123日期格式转换为DateTime-Object,反之亦然。 DateTime-Object到RFC-date-string工作得很好但是因为我住在德国(MEZ-时区),我得到了错误的结果。

所以曾经,这是我的转换课程:

public interface IRFCDate
{
    DateTime ToDateTime();
}

public class RFCDate : IRFCDate
{
    private string dateString { get; set; } = null;
    private DateTime? dateObject { get; set; } = null;

    public DateTime ToDateTime()
    {
        if (dateObject.HasValue) return dateObject.Value;

        string regexPattern = @"[a-zA-Z]+, [0-9]+ [a-zA-Z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ (?<timezone>[a-zA-Z]+)";
        Regex findTimezone = new Regex(regexPattern, RegexOptions.Compiled);

        string timezone = findTimezone.Match(dateString).Result("${timezone}");
        string format = $"ddd, dd MMM yyyy HH:mm:ss {timezone}";

        dateObject = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
        return dateObject.Value;
    }
    public IRFCDate From(IConvertible value)
    {
        if (value is string)
            dateString = value.ToString();
        else if (value is DateTime)
            dateObject = (DateTime)value;
        else
            throw new NotSupportedException($"Parametertype has to be either string or DateTime. '{value.GetType()}' is unsupported.");
        return this;
    }
}

我的Xunit-Testcase看起来像这样:

[Fact]
public void StringToDateTime()
{
    DateTime expectedValue = new DateTime(2001, 1, 1);
    string RFCDatestring = "Mon, 01 Jan 2001 00:00:00 GMT";
    DateTime actualValue = RFCDatestring.To<DateTime>();
    Assert.Equal(expectedValue, actualValue); 
}

在这种情况下打电话

return new RFCDate().From(@this).ToDateTime();

因此,执行我的测试用例时的结果是:

Assert.Equal()失败

预计:2001-01-01T00:00:00.0000000

当前:2001-01-01T01:00:00.0000000 + 01:00

有人有任何想法如何解决这个问题?实际值应该是00:00而不是1点。

答案

好吧,我看到我犯了一个错误:我需要将时区设置为CET而不是GMT,因为我在德国是CET(或GMT + 1)。所以功能是正确的。

以上是关于将datetime-format从RFC1123转换为DateTime-Object的主要内容,如果未能解决你的问题,请参考以下文章

python中的RFC 1123

PHP 中的 RFC1123 和 RFC2822 日期时间格式有啥区别?

RFC-1123 的 DateTime 给出了不准确的时区

如何使用 XSLT 2.0 获取当前日期时间的 RFC1123 日期格式

java中将RFC1123日期时间格式化

python http://stackoverflow.com/questions/225086/rfc-1123-date-representation-in-python