web-gelistirme-sc.com

DateTime formatı nasıl doğrulanır?

Kullanıcının bir DateTime formatı girmesine izin vermem gerekiyor, ancak kabul edilebilir olup olmadığını kontrol etmek için doğrulamam gerekiyor. Kullanıcı "yyyy-AA-GG" girebilir ve iyi olabilir, ancak "MM/yyyyMM/ddd" veya başka bir kombinasyon da girebilirler. Bunu doğrulamanın bir yolu var mı?

15
Kevin Cho

Kasıtlı olarak bir şeye çevrilen karakterleri eklemek istediğiniz için girdikleri formatı gerçekten doğrulamanın hiçbir yolunu bilmiyorum. Göz önünde bulundurmanız gereken bir şey, girilen formatın ne anlama geldiğinin bir önizlemesini göstererek kullanıcının kendi kendini doğrulamasını sağlamaktır.

9
Jason

Böyle bir şey mi arıyorsunuz?

DateTime expectedDate;
if (!DateTime.TryParse("07/27/2012", out expectedDate))
{
    Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!");
}

Eğer kullanıcı gerekli olan format (ları) biliyorsa ...

string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" };
DateTime expectedDate;
if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"), 
                            DateTimeStyles.None, out expectedDate))
{
    Console.Write("Thank you Mario, but the DateTime is in another format.");
}
22
Hans Z

Belirtilen biçim dizesinin geçerli olup olmadığını bilmek istediğinizi varsayıyorum ...

Bunun için gidiş-dönüş olabilir:

    private bool IsValidDateFormat(string dateFormat)
    {
        try
        {
            String dts=DateTime.Now.ToString(dateFormat);
            DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
5
ZipXap

Yanlış hatırlamadığım sürece, yalnızca geçersiz DateTime formatı dizeleri bir karakter uzunluğundadır. Herhangi bir 2 veya daha fazla karakter DateTime formatı dizesinin geçerli olduğunu varsayabilirsiniz.

DateTime.ParseExact("qq", "qq", null) == DateTime.Today
DateTime.ParseExact("myy", "501", null) == "05/01/2001"

Standart (1 karakter)
Özel (> 1 karakter)

Başvuru için, izin verilen tek karakterli dizgelerin formatları:

d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y

q gibi herhangi bir karakter kendi başına geçersizdir. Diğer tüm dizeler, biçimlendirme dizeleri olarak başarıyla ayrıştırılır.

3
Guvante

Doğrulama stratejiniz hakkında konuşmuyorsunuz. Neyse, düzenli ifadeler içeren ve izin verilen modelleri uygulayan bir şey kullanmalısınız. Bu, resmi geçerliliğe karşı yardımcı olacaktır .. o zaman asıl içeriğe dikkat etmeniz ve değerlerin ay, gün ve yıla göre doğru olduğundan emin olmanız gerekir.

Yine de, birkaç kişi alt tabakanın size iyi bakmasını sağlamak için DateTime.TryParse () yöntemini kullanmasını önerdi. Ancak yine de formatı belirtmeniz gerekecek! yani sihir yok! aksi takdirde belirsizliğe düşeceksin

0
Diego De Vita

Bu benim için çalışıyor-

try
{
  String formattedDate = DateTime.Now.ToString(dateFormat);
  DateTime.Parse(formattedDate);
  return true;
}
catch (Exception)
{
  return false;
}
0
akash singh

Benim çözümüm giriş alanını salt okunur olarak işaretlemekti ve kullanıcıların değeri yalnızca jqueryui datepicker ile değiştirmesine izin vermekti.

Sezgiseldir. Tercih ettiğiniz formatı belirleyebilirsiniz ve yalnızca bu formatı doğrulamanız gerekir.

0