2016-03-19 1 views
1

Я готов преобразовать RFC1123-dateformat в DateTime-Object и наоборот. DateTime-Object для RFC-date-string отлично работает, но поскольку я живу в Германии (MEZ-Timezone), я получаю неправильные результаты.Преобразование datetime-формата из RFC1123 в DateTime-Object

Так однажды, вот мой класс для преобразования:

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(); 

So результат при выполнении моей тестовой системы:

Assert.Equal() Отказ

Ожидаемое: 2001-01-01T00: 00: 00,0000000

Фактический: 2001-01-01T01: 00: 00,0000000 + 01: 00

У кого-то есть идеи, как это исправить? Фактическое значение должно быть 00:00 часов вместо 1 часа.

ответ

0

ОК, я видел, что совершил ошибку: мне нужно установить часовой пояс CET вместо GMT, так как я нахожусь в Германии, которая является CET (или GMT + 1). Таким образом, функция верна.