मैं इसे बनाने के लिए अलग-अलग डेटाफॉर्मैटस्ट्रिंग या यहां तक ​​​​कि अलग-अलग नियंत्रण जैसी अलग-अलग चीजों की कोशिश कर रहा हूं, इसलिए यह 24 प्रारूप का उपयोग करता है लेकिन यह एएम/पीएम प्रारूप पर रहता है, इसे 24 घंटों का प्रारूप कैसे बनाया जाए?

संपादित करें: अधिक खोज के बाद मुझे एहसास हुआ कि यह वही कोड कुछ लोगों को 24 घंटे का प्रारूप दिखाता है, इसलिए मैं इसमें सुधार कर सकता हूं: मेरे पीसी में एएम/पीएम के रूप में क्या कॉन्फ़िगर किया जा सकता है? मैंने पहले ही web.config में लोकेल को 24 घंटे के लोकेल में बदल दिया है लेकिन परिणाम वही है। मेरी क्षेत्रीय सेटिंग भी 24 घंटे का समय है।

देखें:

<div class="col-md-2">
    Horario teórico Desde
    @Html.EditorFor(model => model.HorarioTeoricoDesde, new { htmlAttributes = new { @class = "form-control form-control-sm" } })
    @Html.ValidationMessageFor(model => model.HorarioTeoricoDesde, "", new { @class = "text-danger" })
</div>

व्यूमॉडल:

[Display(Name = "Horario Teorico Desde")]
[Required(ErrorMessage = "El Horario Teorico Desde es Requerido")]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")]
public DateTime? HorarioTeoricoDesde { get; set; }

मेरी क्षेत्रीय सेटिंग्स 24 घंटे, स्पेनिश भाषा हैं। यह मेरा web.config है:

  <system.web>
    <globalization culture="es-AR" uiCulture="es-AR" />

मैं इसे इस तरह देखता हूं:

This is how i see it:

धन्यवाद!!

3
JCIsola 23 मार्च 2020, 22:22

2 जवाब

सबसे बढ़िया उत्तर

जब आप DataType.Time का उपयोग करते हैं तो इनपुट time प्रकार का होता है।

इनपुट प्रकार time HTML5 में नया है। इस प्रकार का समर्थन अभी भी बहुत कम है। भले ही आप एचएच: एमएम एएम/पीएम प्रारूप में समय देखते हैं (24 संस्करण (इस समय विकास के तहत)), बैकएंड पर यह अभी भी 24 घंटे के प्रारूप में काम करता है, आप इसे देखने के लिए कुछ बुनियादी जावास्क्रिप्ट का उपयोग करने का प्रयास कर सकते हैं।

उदाहरण: bootstrap-timepicker का उपयोग करना।

व्यूमॉडल:-

public class Time24ViewModel
{
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")]
    public DateTime? HorarioTeoricoDesde { get; set; }

    [Display(Name = "Horario Teorico Desde")]
    [Required(ErrorMessage = "El Horario Teorico Desde es Requerido")]
    public string HorarioTeoricoDesdeStr
    {
        get
        {
            return HorarioTeoricoDesde.HasValue ? HorarioTeoricoDesde.Value.ToString("HH:mm") : "";
        }
        set
        {
            if (!string.IsNullOrWhiteSpace(value))
            {
                var time = TimeSpan.Parse(value);
                HorarioTeoricoDesde = new DateTime(time.Ticks);

            }
        }
    }
}

नियंत्रक:-

public class TimeController : Controller
{
    // GET: Time
    public ActionResult Time24()
    {
        var model = new Time24ViewModel
        {
            HorarioTeoricoDesde = DateTime.Now
        };
        return View(model);
    }
    [HttpPost]
    public ActionResult Time24(Time24ViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        return View(model);
    }
}

देखें:-

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-timepicker/0.5.2/js/bootstrap-timepicker.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-timepicker/0.5.2/css/bootstrap-timepicker.css" rel="stylesheet" />

@using (Html.BeginForm("Time24", "Time", FormMethod.Post)) { 
<div class="col-md-2">
    Horario teórico Desde
    @Html.EditorFor(model => model.HorarioTeoricoDesdeStr, new { htmlAttributes = new { @class = "form-control form-control-sm" } })
    @Html.ValidationMessageFor(model => model.HorarioTeoricoDesdeStr, "", new { @class = "text-danger" })
</div>
<div class="col-md-2">
    <input type="submit" class="btn btn-dark" value="Submit"/>
</div>
}

<script>
    $('#HorarioTeoricoDesdeStr').timepicker({
        showMeridian: false
    });
</script>

(परीक्षित)

2
Ashiquzzaman 3 अप्रैल 2020, 02:39

स्थानीय बदलने से (!) मदद नहीं मिलेगी -> मुद्दा यह है कि यह अलग-अलग डिफ़ॉल्ट लोकेशंस (क्लाइंट साइड) में अलग-अलग आउटपुट देता है।
उदाहरण के लिए:

    en_SS: 12:00 AM
    fr_BL: 00:00
    ps_AF: 0:00
    es_CO: 12:00 a.m.

तो आप कोशिश कर सकते हैं

@item.Date.ToString("0:HH:mm")

या

अपने मॉडल में एक संपत्ति जोड़ने के लिए यह कोड जोड़ें:

public string ReturnDateForDisplay
{
    get
    {
       return this.ReturnDate.ToString("0:HH:mm");
    }
}

फिर अपने पार्टियल व्यू में:

@Html.EditorFor(model => model.ReturnDateForDisplay)

दृश्य बनाएं में परिवर्तन करने के लिए आपको केवल HTML हेल्पर कॉल में अपने इच्छित प्रारूप को लागू करना है, अर्थात।

 @Html.TextBoxFor(m => m.YOUR_INPUT, "{0:HH:mm}")

संपादित करें
अपना वांछित परिणाम प्राप्त करने के लिए (प्लसधारक और सत्यापन दिखा रहा है):

HtmlAttributes तर्क के साथ TextBoxFor() के अधिभार का उपयोग करें। यह तर्क उन सभी विशेषताओं के साथ एक अनाम ऑब्जेक्ट होना चाहिए, जिन्हें आप इनपुट को असाइन करना चाहते हैं।
उदाहरण के लिए, यदि आप प्लेसहोल्डर और वर्ग विशेषताएँ सेट करना चाहते हैं:

@Html.TextBoxFor( model => model.HorarioTeoricoDesde, "{0:HH:mm}", new { 
       @class = "form-control datecontrol", type = "date" })

अन्य संभावित समाधान: ASP.Net फ़ोरम
अतिरिक्त जानकारी:
एक पसंदीदा तरीका सभी संभावित मुद्दों के लिए एक सामान्य प्रारूप का उपयोग करना है, और फिर क्लाइंट (आपका वेब UI) बैक एंड/एपीआई को भेजने से पहले मूल्य को सही ढंग से प्रारूपित कर सकता है। दिनांक और दिनांक समय के लिए, ISO 8601 प्रारूप का उपयोग करें और स्वीकृत चर प्रकार को बैक एंड में एक स्ट्रिंग के रूप में रखें।

समय मान के रूप में सूचीबद्ध किया जाएगा, उदाहरण के लिए, 13:24 (HH:mm)। कुछ कारणों से बेहतर:

  • दिनांक स्वरूप स्वरूपों के बीच नहीं बदलता है।
  • स्ट्रिंग्स में उनके मूल्य भागों को गलत तरीके से पार्स नहीं किया गया है।
  • क्लाइंट और सर्वर के बीच UTC / ऑफ़सेट समस्याएँ उत्पन्न नहीं होती हैं।
  • आईएसओ प्रारूप स्ट्रिंग क्रमबद्ध है।
0
Codebreaker007 30 मार्च 2020, 01:23
लोकेल बदलने से मदद नहीं मिलती है। साथ ही, फ़ील्ड से डेटा पढ़ना कोई समस्या नहीं है, यह HTML तालिका में 24hs प्रारूप में और विवरण दृश्य में भी पूरी तरह से दिखाता है लेकिन बनाएं दृश्य में नहीं। समस्या 12 घंटे के प्रारूप के साथ-साथ नियंत्रण में AM / PM प्लेसहोल्डर और क्रिएट व्यू पर इसकी मान्यता है, मेरी पोस्ट की वह छवि क्रिएट व्यू में नियंत्रण दिखाती है।
 – 
JCIsola
29 मार्च 2020, 11:06
मेरा संपादन देखें हालांकि आपको अपना प्रश्न स्पष्ट करना चाहिए
 – 
Codebreaker007
29 मार्च 2020, 14:24
@Html.TextBoxFor(model => model.HorarioTeoricoDesde, "{0:HH:mm}") जो मुझे बिना सत्यापन के एक खाली टेक्स्टबॉक्स दिखा रहा है और न ही घंटों और मिनटों के लिए प्लेसहोल्डर। ViewModel में डेटाटाइप के साथ या उसके बिना प्रयास किया गया।
 – 
JCIsola
29 मार्च 2020, 23:50
क्या आपने टेक्स्टबॉक्स के लिए मेरे संपादित करें ओवरलोडिंग को देखा और आजमाया है?
 – 
Codebreaker007
31 मार्च 2020, 12:51