【问题标题】:Add AM/PM To Time将 AM/PM 添加到时间
【发布时间】:2018-01-18 09:05:32
【问题描述】:

我的datetime 是这种格式2017-01-15T21:00-07:00 所以我正在解析它

string ADT = Convert.ToString(timestamp.DateOrTimestamp);
int index = ADT.IndexOf("T");
string FADT = (index > 0 ? ADT.Substring(0, index) : "");
DateTime dtFADT = DateTime.ParseExact(FADT, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
string ADT1 = ADT.Split('T', '-')[3];

Console.WriteLine("{0}: {1}", timestamp.Type, dtFADT.ToString("MM/dd/yyyy") + " " + String.Format("{0:h:mm t}", ADT1));

将写入控制台:Delivery: 01/15/2017 09:00:00

为什么String.Format() 没有将上午/下午添加到我的时间?

【问题讨论】:

  • 21:00-07:00 这是一个范围还是什么?如果07 是几秒钟,那么最后一个00 是什么意思?
  • 您的DateTime NOT 格式为2017-01-15T21:00-07:00。那是stringDateTime NOT 是否有格式 - 它只是一个数字。只有当您调用 .ToString(...) 时,您才会创建具有格式的 string
  • @Enigmativity - 很抱歉在 DateTime 或 String 方面没有正确理解 DateTime 与 String。如何解决我的问题的适用示例,而不是关于变量的抨击或教训。
  • @StarsFlyFreeFromCozyNights - 抱歉,没有骂人。只是想非常清楚DateTime 和日期/时间格式之间的关系。

标签: c# string.format


【解决方案1】:

这可能对你有用

string smdt = "2017-01-15T21:00-07:00";
string format = "yyyy-MM-ddTHH:mmzzz";
DateTime dt = DateTime.ParseExact(smdt, format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
string extractedDate = dt.ToString("dd/MM/yy h:mm tt");

【讨论】:

  • 仍然没有添加上午/下午
  • 我不明白你在追求什么?
  • 根据配置的系统时间格式无法正常工作。在 Windows 中,您可以在此处进行配置:(控制面板 | 语言 | 更改日期、时间或数字格式 | 其他设置... | 时间)请参阅上午和下午符号时间格式。我一直在上午而不是上午
【解决方案2】:

为了做类似的事情,我最终不得不基于 eu-US 创建一个 CultureInfo,但将第二个参数设置为 false 以不允许系统/用户覆盖这些格式。

public static CultureInfo enUS = new CultureInfo("en-US", false);

然后我可以在任何需要格式化日期以进行解析或 toString 的代码中使用它,该日期/时间具有 tt 部分的格式,它将放置我想要的 AM 或 PM .

运行该软件的 PC 上的系统语言设置与我的不同。他们使用上午或下午或类似的东西。当我们想要使用 AM 或 PM 时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2019-03-05
    • 2011-06-16
    • 1970-01-01
    • 2022-11-15
    • 2011-12-29
    • 2018-01-21
    相关资源
    最近更新 更多