1

D-Dayカレンダーを使用していますが、よくわかりませんが、奇妙な問題が発生しました。

私は基本的に私のコードのためにこれを持っています

iCalendar iCal = iCalendar.LoadFromStream(file.InputStream);
 foreach (Event evt in iCal.Events)
                {
                   DateTime start = evt.DTStart.Date;
                   DateTime end = evt.DTEnd.Date;
                  // loop through it and get values.
                }

しかし、グーグルカレンダーからカレンダーをインポートすると、インポートしているもののいくつかで終了日がめちゃくちゃになります。

例えば私はこれを持っています

タイトル:表示されない日時:3月21日(日)(終日)。

それでもインポートすると、開始日は21日ですが、終了日は22日であるはずです。

何が起こっているのかわからない。

私はあなたたちに他にどんな情報を与えることができるのか本当にわかりません。

cmd行アプリケーションを作成し、それに.icsファイルを入れました。誰かが良い場所を知っているなら、私はそれをアップロードすることができます、そしてあなたたちは私が何を意味するかを見ることができます。

これは私のcmd行が出力しているものです。

Start Date Of this Record
Some one day task 3/25/2010 12:00:00 AM
End Date of this Record 3/26/2010 12:00:00 AM


Start Date Of this Record
Test using quick create(bubble that shows up when clicked on date box) - 1 day t
ask 3/21/2010 12:00:00 AM
End Date of this Record 3/22/2010 12:00:00 AM


Start Date Of this Record
Spans 2 days 3/30/2010 12:00:00 AM
End Date of this Record 4/1/2010 12:00:00 AM
4

3 に答える 3

1

チョボ、

DDay.iCal で終日のイベントを作成しようとしている場合は、非常に簡単です。

event.IsAllDay = true;

それはあなたが達成しようとしていることですか?正直なところ、あなたの問題は、あなたがすでに私たちに話した内容からはそれほど明確ではありません.

ありがとう -ダグ

于 2010-03-25T21:06:56.993 に答える
1

終日イベントの場合、終了時間は00:00:00翌日になると思います12:00:00 AM。これはあなたが時代に見ているものではありませんか?

あなたが与える最後の例は、本当に2日間(3月は31日あります)にまたがり、正しいです。表示されている出力は、終日イベントの定義と一致しています。午前 0 時に開始し、翌日の午前 0 時に終了します。

終日イベントを同じ日にのみ保持したい場合は、次のようなチェックを行うことができます。

if (((end - start) == TimeSpan.FromDays(1.0))
    && (start.Hour == 0 && start.Minute == 0))
{
    end = end - TimeSpan.FromSeconds(1.0); // now 23:59:59 same day as start
}
于 2010-03-23T18:55:57.910 に答える
0

Start プロパティと End プロパティに同じ日付を設定し、IsAllDay = true にする必要があります。

var evt = iCal.Create<DDay.iCal.Event>();
evt.Start = new iCalDateTime(myEvent.Date);
evt.End = new iCalDateTime(myEvent.Date);
evt.IsAllDay = true;

そうしないと、IsAllDay プロパティが期待どおりに機能しません。このプロパティの実装を確認してください:

 virtual public bool IsAllDay
        {
            get { return !Start.HasTime; }
            set
            {
                // Set whether or not the start date/time
                // has a time value.
                if (Start != null)
                    Start.HasTime = !value;
                if (End != null)
                    End.HasTime = !value;

                if (value && 
                    Start != null &&
                    End != null &&
                    object.Equals(Start.Date, End.Date))
                {
                    Duration = default(TimeSpan);
                    End = Start.AddDays(1);
                }
            }
        }
于 2014-04-15T08:48:03.307 に答える