繁体   English   中英

根据C#中的区域性转换(更改)当前的DateTime

[英]Convert(change) current DateTime as per culture in c#

if (!IsPostBack && !Page.IsCallback)
{
    double OffsetHrs = GetTimeZoneOffsetFromCookie();
    string dateFormat = ServiceManager.LocalizationService.GetString("AppHeaderTop", "DateFormat", "g");
    CultureSelected CultureSelected = GetCultureSelected();
    ASPxLabelCurrentTime.Text = DateTime.Now.ToUniversalTime().AddHours(-OffsetHrs).ToString(dateFormat);                
if (CultureSelected.CultureCode != "en-US") 
{
    DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat;
    DateTimeFormatInfo currentDtfi = new CultureInfo(CultureSelected.CultureCode, false).DateTimeFormat;
    ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi).ToString(currentDtfi.ShortDatePattern); //what can i Use here ?
}               

假设针对en-US文化的ASPxLabelCurrentTime.Text输出为ASPxLabelCurrentTime.Text 11/2/2015 4:14 PM (70)如果选择特定的文化,我希望此日期时间为11/2/2015 4:14 PM (70)在其中显示具体的文化格式。

您的问题似乎不清楚,但我尝试尝试一下。

首先,这(70)到底是什么? 这是哪里来的 在不使用带有ParseExactTryParseExact方法的字符串文字定界符中的情况下, en-US文化无法解析此字符串。 另一方面,由于您将ASPxLabelCurrentTime.Text设置为DateTime.Now.ToUniversalTime().AddHours(-OffsetHrs).ToString(dateFormat)代码的结果,因此我不认为这(70)部分确实是一个问题这个问题。

其次,如果我理解清楚,那么问题似乎出在DateTime.ToString(string)方法的使用上。

ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi)
                                   .ToString(currentDtfi.ShortDatePattern);
                                    // ^^^ Problem seems here

Okey假设您使用usDtfi区域性( en-US )成功解析了此ASPxLabelCurrentTime.Text但是使用此.ToString(string)方法,您实际上并没有使用currentDtfi设置,而是在生成格式化的字符串表示形式时使用了CurrentCulture设置。您的DateTime

DateTime.ToString(String) doc ;

使用指定的格式和当前区域性的格式约定将当前DateTime对象的值转换为其等效的字符串表示形式。

因为我们不知道什么GetCultureSelected方法正好返回,它可能会可能不会是相同的文化与currentDtfi

强烈怀疑,您可以通过在ToString方法中使用区域性作为第二个参数来解决此问题;

ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi)
                                   .ToString(currentDtfi.ShortDatePattern, currentDtfi);

如果此(70)实际上是字符串的一部分,则需要使用ParseExactTryParseExact方法来提供其确切格式。

string s = "11/2/2015 4:14 PM (70)";
DateTime dt;
if(DateTime.TryParseExact(s, "MM/d/yyyy h:mm tt '(70)'", CultureInfo.GetCultureInfo("en-US"),
                          DateTimeStyles.None, out dt))
{
    ASPxLabelCurrentTime.Text = dt.ToString(currentDtfi.ShortDatePattern, currentDtfi);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM