Soru '3/18/09 10:16 PM' dizesi geçerli bir AllXsd değeri değil


Açıkçası okuyucu, XML'den gelen bu formatı sevmiyor.

Bunu yeniden biçimlendirebilir miyim diye merak ediyorum. Dönüştürmeye çalışılıyor DateTime aşağıdaki kodu kullanarak benim XmlReader:

reader.ReadContentAsDateTime();

44
2018-03-19 11:41


Menşei




Cevaplar:


Xml okuyucuları genellikle tarihleri ​​/ saatleri çok özel bir biçimde bekler; bunu kullanarak kendiniz kullanabilirsiniz XmlConvert:

string s = XmlConvert.ToString(DateTime.Now);
DateTime when = XmlConvert.ToDateTime(s);

Başka bir şey kullanıyorsanız, onu bir dize olarak okumak ve kullanmak zorundasınız. DateTime.TryParseExact gerçek format dizesini belirtmek için (veya benzeri):

string s = reader.ReadContentAsString();
DateTime when = DateTime.ParseExact(s, "M/d/yy hh:mm tt",
     CultureInfo.InvariantCulture);

Eğer kullanıyorsanız XmlSerializerEğer dönüştürme yapmak için bir shim özelliği kullanabilirsiniz - bu ne yapıyorsanız bana bildirin ...


44
2018-03-19 11:46



Beslediğim veriler 10/29/2012 15:25 oldu ve bu başarısız oldu. Bunu 10/11/2012 15:25 olarak değiştirdiğimde işe yaradı. - Brian Leeming
@MarcGravell, kullanarak bazı rss özet akışını test etmeye çalıştığımda XmlSerializer, PubDate öğe hataya neden olur. Bunu nasıl düzeltebilirim? - burhan
@burhan, değerin neye benzediğini inceleyerek ve uygun şekilde ele alarak? Alternatif olarak, çekirdek çerçeve daha iyi bir iş çıkarabilecek RSS hedefli sınıfları içerir. - Marc Gravell♦
@burhan xml ve modelinizi görmeden olmaz, hayır - Marc Gravell♦
@burhan çözüm, her zaman olduğu gibi xml ve eşleşen bir modele sahip olmaktır. Bazen bu, doğrudan gidebileceğiniz anlamına gelir. Tarihlerin bir dize türü (DateTime yerine) olması ve ardından bu işlemi ayrıştırmak için ek işleme koymanız gerekebilir. Bununla birlikte, rastgele bir bağlantı, mücadele ettiğiniz kesin xml değerini sağlamaz. - Marc Gravell♦


XML'e göre şema spec, tarih saat değerleri ISO8601 biçiminde olmalıdır, örn.

2009-03-13T22:16:00

86
2018-03-19 11:48



Yakut kullanımında iso8601 yöntem, örneğin Time.now.iso8601. - Zubin
Meraktan çıkmış, ISO8601 formatı gibi bir şey görünmeli 2009-03-18T22:16:00-05:00Ama David'in cevabı (zaman dilimini atlatma) benim için de çalışıyor (oysa ISO8601 formatı yok). XmlConverter'de yerel bir serileştirme nedeniyle (bu nedenle zaman dilimi gerekmez) bu mu? - djiango
ISO8601'de saat dilimi isteğe bağlıdır, bu nedenle hem orijinal dizgem hem de dizginiz geçerli ISO8601 tarihidir. Göre w3.org/TR/xmlschema-2/#deviantformatsZaman dilimi XML şemasında da isteğe bağlıdır. Saat dilimi sürümünün neden sizin için çalışmadığından emin değilim. - David Norman
Php için Artisans :) var toIso8601String yöntem nesbot/carbon php lib. - userlond