我在编辑模式下遇到日期格式问题。日期存储为dd / MM / yyyy HH:mm:ss。我要在bootstrapdatetime picker中绑定的日期应该具有格式MM / dd / yyyy,但是viewmodel的格式为DateTime为dd / MM / yyyy并将其发送到编辑视图。
我试图通过改变CurrentCulture,CurrentUICulture和Parsing等来改变格式。但是没有成功
Web-App的CurrentCulture被设置为“pt-BR”,但我总是将“en-US”文化用于datepicker,甚至将应用文化设置为“pt-BR”或任何其他文化。
型号:
[Column(TypeName = "datetime2")]
public DateTime? StartsOn { get; set; }
视图模型:
public DateTime? StartsOn { get; set; }
控制器:
CultureInfo provider = CultureInfo.CreateSpecificCulture("en-US");
string dateString1="";
string lang="pt-BR";
dateString1 = entityVM.StartsOn.ToString();
var StartsOn = (DateTime.ParseExact(dateString1, "dd/MM/yyyy HH:mm:ss", provider)
.ToString("MM/dd/yyyy", provider));
var outputCulture = CultureInfo.CreateSpecificCulture("en-US");
var inputCulture = CultureInfo.CreateSpecificCulture(lang);
//Just for date format change to en-US culture, and then reset it to application culture
Thread.CurrentThread.CurrentCulture = outputCulture;
Thread.CurrentThread.CurrentUICulture = outputCulture;
//entityVM.StartsOn = (DateTime.ParseExact(StartsOn, "MM/dd/yyyy", outputCulture)); //ok, Format changed here
//Reset culture to pt-BR (application culture)
Thread.CurrentThread.CurrentCulture = inputCulture; // Problem! Format again changed here.
Thread.CurrentThread.CurrentUICulture = inputCulture;
以下是观点:
<div class='input-group date' data-provide="datepicker">
@Html.TextBox("StartsOn", Model.StartsOn, new { @class = "form-control", @id = "datetimepicker1", @type = "text", @required = true })
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
<script type="text/javascript">
$(document).ready(function () {
$('.datepicker').datepicker();
});
</script>
问题是我总是得到dd / MM / yyyy而不是MM / dd / yyyy。怎么能转换成MM / dd / yyyy?
答案 0 :(得分:0)
您需要指定datepicker的日期格式:
$('.datepicker').datepicker({
dateFormat: 'mm/dd/yy'
});
答案 1 :(得分:0)
日期选择器是否正常显示?您正在使用.datepicker
使用日期选择器,但我看不到任何提及的类datepicker
。你的意思是它显示了从模型中填充它的不同格式吗?
答案 2 :(得分:0)
您的viewmodel是正确的,而不是dd / MM / yyyy。 dd / MM / yyyy,MM / dd / yyyy ......都是&#34;显示&#34;仅格式化。基础价值是DateTime?并且与显示格式无关。 使用jquery ui datepicker,默认显示格式(dateFormat)已经是&#34; mm / dd / yy&#34;。使用bootstrap datepicker,格式为:&#34; mm / dd / yyyy&#34; (这也是默认值)。
我认为您的问题是,您正在将日期时间值转换为字符串,然后解析回日期时间。我不知道你为什么这样做。如果你这样做,为什么你也不要去ToString(&#34; dd / MM / yyyy HH:mm:ss&#34;)?
dateString1 = entityVM.StartsOn.ToString("dd/MM/yyyy HH:mm:ss");
var StartsOn = (DateTime.ParseExact(dateString1, "dd/MM/yyyy HH:mm:ss", provider)
.ToString("MM/dd/yyyy", provider));
恕我直言,这是一个完全不必要的转换。它应该只是:
var StartsOn = entityVM.StartsOn;
//or:
var StartsOn = (DateTime)entityVM.StartsOn;