根据 c# 中的区域性转换(更改)当前日期时间

本文关键字:更改 当前日期 时间 转换 区域性 根据 | 更新日期: 2023-09-27 18:20:13

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 ?
}               

假设ASPxLabelCurrentTime.Text输出 因为en-US文化是11/2/2015 4:14 PM (70)如果我选择特定区域性,我希望此日期时间11/2/2015 4:14 PM (70)以该特定区域性格式显示。

根据 c# 中的区域性转换(更改)当前日期时间

你的问题似乎不清楚,但我试着试一试。

首先,这(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设置,而是在生成DateTime的格式化字符串表示形式时使用CurrentCulture设置。

DateTime.ToString(String)文档;

将当前 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);
}