6

私はいくつかのWSDLにこれを持っています:

<element name="startDate" type="xsd:dateTime"/>
<element name="endDate" type="xsd:dateTime"/>

その結果、SOAP エンベロープに次のテキストが表示されます。

<startDate>2008-10-29T12:01:05</startDate>
<endDate>2008-10-29T12:38:59.65625-04:00</endDate>

ミリ秒とゾーン オフセットがあるのは一部の時間だけです。この例では 37 分 54 秒の範囲を取得しようとしているため、頭痛の種になりますが、オフセットのために 4 時間 37 分 54.65625 秒になってしまいます。これは DateTime の何らかの丸め誤差ですか? これを防ぐにはどうすればよいですか?

4

2 に答える 2

5

endDate 値の Kind プロパティが DateTimeKind.Local に設定されていると思われます。

次のように、これを DateTimeKind.Unspecified に変更できます。

endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified)

その後、タイムゾーンオフセットなしでシリアル化されると思います。

DateTime.Now または DateTime.Today を使用して初期化した場合は DateTimeKind.Local で DateTime を取得し、Datetime.UtcNow を使用して初期化した場合は DateTimeKind.Utc を取得することに注意してください。

于 2008-10-30T08:13:53.150 に答える
1

日付を生成するために何を使用していますか?何らかのシリアライザー (WCF または XmlSerializer) を使用するのではなく、コードでこの XML を構築している場合は、System.Xml.XmlConvert を使用して、次のように日付を生成および解釈できます。

XML に入れる文字列を作成するには:

DateTime startDate = DateTime.Now;
string startDateString = System.Xml.XmlConvert.ToString(startDate);

XML から日付を取得するには:

DateTime startDateFromXml = System.Xml.XmlConvert.ToDateTime(startDateString);

XML にプッシュする前に 37 分 54 秒異なる 2 つの DateTime インスタンスから始めた場合、それらを XML から取り出した後でも 37 分 54 秒は異なります。

于 2008-10-29T19:28:07.907 に答える