2017-01-05 6 views
0

iCal.Netを使用して.icsドキュメントを生成しています。なぜiCal.Netは無効な時間を生成していますか?

Event calendarEvent = new Event 
{ 
    IsAllDay = false, 
    Summary = "summary", 
    Description = "summary", 
    DtStart = new CalDateTime(TimeZoneInfo.ConvertTimeFromUtc(start,TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")), "America/New_York"), 
    DtEnd = new CalDateTime(TimeZoneInfo.ConvertTimeFromUtc(end, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")), "America/New_York") 
}; 

var calendar = new Calendar(); 
calendar.AddTimeZone(new VTimeZone("America/New_York")); 
calendar.Events.Add(calendarEvent); 

var serializer = new CalendarSerializer(new SerializationContext()); 
return serializer.SerializeToString(calendar); 

通常、結果の開始日と終了日は次のようになり:

DTEND;TZID=America/New_York:20170106T132000 
DTSTAMP:20170104T005548Z 
DTSTART;TZID=America/New_York:20170106T130000 

しかし、彼らは時折、このように生成されます。特に

DTEND;TZID=America/New_York:20180105T002000 
DTSTAMP:20170105T191635Z 
DTSTART;TZID=America/New_York;VALUE=DATE:20180105 

VALUE=DATE:20180105次に気づきますDTSTART。何らかの理由で、これにより、ほとんどのカレンダーアプリケーションがイベントを終日イベントとして読み取るようになります(上記のように、そうではないと明示的に言っています)。

何が起こっているのですか?

EDIT:

開始日は、第二のために2017年6月1日、最初例えば午後1時、および2018年5月1日、12AMです。私はそれが第二日時に、時間はどうやらデフォルト値

+0

さて、これらのケースでは 'start'の値は何ですか? –

+0

申し訳ありません、この情報を問題の声明に追加しました –

答えて

1

あるdate + 12AMdate後0ティックであることから、iCal.netは(時間なし)あなたがdateに言及していることを前提としているという事実とは何かを持っていると思いますCalDateTimeのインスタンスを作成するときに発生します。

あなたはstartは12AMであるnew CalDateTime(TimeZoneInfo.ConvertTimeFromUtc(start,TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")), "America/New_York")上のオブジェクトのプロパティを見れば、あなたはHasTimefalseであることがわかります。

幸いにも、このプロパティはget; set;です。単にtrueに設定すると、問題はなくなります。

関連する問題