我需要将字符串类型的日期转换为MM/dd/yyyy格式,并在某些特定条件下返回年份.我的输入字符串类型日期格式也可以是(04/03/2023).但输出应该只是MM/dd/yyyy格式. 以下是我正在try 做的事情.

 string dateformat= "2023-05-28t00:00:00";
    string yr = string.Empty;
    
    if (!string.IsNullOrWhiteSpace(dateformat))
    {
     
        DateTime date = DateTime.ParseExact(dateformat, "MM/dd/yyyy",
          CultureInfo.InvariantCulture);

        string currentResourceDate = date.ToString("MM/dd/yyyy");
        int currentMon = int.Parse(currentResourceDate.Substring(0, 2));
        int cycleYear = currentMon >= 4 ? date.Year + 1 : date.Year;
        yr = Convert.ToString(cycleYear);
    }

但它抛出了一些错误,因为 ‘字符串’2023-05-28t00:00:00‘未被识别为有效的日期时间.’

推荐答案

ParseExact期望您为其提供exact格式的字符串-日期is in.

Docs:

定义S所需格式的格式说明符.

其中"S"是以字符串表示的日期参数.

在您的情况下,这将是:

DateTime.ParseExact(formattedStringDate, "yyyy-MM-dd't'HH:mm:ss", CultureInfo.InvariantCulture)

实际行动:https://dotnetfiddle.net/MiX7hx


最重要的是,我建议使用TryParseExact,它不会抛出,但会为您提供一个成功/失败的布尔指示器和一次性的值:

https://dotnetfiddle.net/h6pTTH

using System;
using System.Globalization;
                    
public class Program
{
    public static void Main()
    {
        var formattedDate = "2023-05-28t00:00:00";
        if (DateTime.TryParseExact(formattedDate, "yyyy-MM-dd't'HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out var dateTime))
        {
            Console.WriteLine("Extremely awkward US format: {0}", dateTime.ToString("MM/dd/yyyy"));
            Console.WriteLine("Current month: {0}", dateTime.Month);
            Console.WriteLine("Cycle year: {0}", dateTime.Month >= 4 ? dateTime.Year + 1 : dateTime.Year);
        }
    }
}

输出:

Extremely awkward US format: 05/28/2023
Current month: 5
Cycle year: 2024

Csharp相关问答推荐

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

错误NU 1301:无法加载源的服务索引

使用特定格式的JsonConvert序列化对象

如何在Visual Studio代码中更改大括号模式{},用于C#语言

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

用C#调用由缓冲区指针参数组成的C API

为什么在使用动态obj+类obj时会调用串联?

Automapper 12.x将GUID映射到字符串

如何比较C#中的L和ł(波兰字符)返回TRUE

DbContext-传递自定义配置选项

如何在我的C#应用程序中设置带有reactjs前端的SignalR服务器?

为什么我可以用硬编码的集合而不是变量来设置没有setter的IList属性的值?

按需无缝转码单个HLS数据段

用于ASP.NET核心的最小扩展坞

FakeItEasy自动嘲弄内容

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

使用本地公共PEM文件加密字符串,使用Azure KayVault中的私钥解密

如何在更新数据库实体时忽略特定字段?

我如何为我的Blazor应用程序构建一个动态教程标注?

能否将我图表中的星号与X轴上一天中的第二位数字对齐?