将引导日期选取器绑定到特定的日期时间格式
本文关键字:日期 时间 格式 绑定 选取 | 更新日期: 2023-09-27 18:34:44
我在编辑模式下使用日期格式有问题。日期存储为 dd/MM/yyyy HH:mm:ss。我想在引导日期时间选择器中绑定的日期格式应为 MM/dd/yyyy,但视图模型的日期时间格式为 dd/MM/yyyy,并将其发送到编辑视图。
我试图通过更改CurrentCulture,CurrentUICulture和Parsing等来更改格式。但没有成功。
Web-App 的当前文化设置为"pt-BR",但我总是为日期选择器提供"en-US"文化,甚至应用程序文化也设置为"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。如何将其转换为月/日/年?
您需要为日期选取器指定日期格式:
$('.datepicker').datepicker({
dateFormat: 'mm/dd/yy'
});
日期选择器是否正确显示?您正在使用日期选择器.datepicker
但我看不到任何被提及为datepicker
类。您的意思是它显示不同的格式以填充模型吗?
您的视图模型是正确的,而不是日/月/年。 日/月/年,月/日/年...都是"显示"格式。基础值是日期时间?并且独立于显示格式。使用jquery ui datepicker,默认显示格式(dateFormat(已经是"mm/dd/yy"。使用引导日期选择器,它的格式是:"mm/dd/yyyy"(它仍然是默认值(。
我认为您的问题是,您正在将日期时间值转换为字符串,然后解析回日期时间。我不知道你为什么要这样做。如果你愿意这样做,为什么不也做ToString("dd/MM/yyyy HH:mm:ss"(?
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;