将日期和时间格式字符串从moment.js转换为C#格式

将日期和时间格式字符串从moment.js转换为C#格式,c#,momentjs,datetime-format,C#,Momentjs,Datetime Format,是否存在将日期和时间格式从moment.js转换为C#的现有函数/库 我将从moment.js接收日期和时间格式(仅此格式,不带日期和时间值),并需要在C.中显示它 例如: YYYY-MM-DD h:mm A //this is the format received from moment.js 然后,如果我在C#中有一个DateTime,我需要将其显示为 2018-06-14 2:30 PM //this is equivalent with YYYY-MM-dd h:mm tt 我需要

是否存在将日期和时间格式从
moment.js
转换为
C#
的现有函数/库

我将从
moment.js
接收日期和时间格式(仅此格式,不带日期和时间值),并需要在
C.
中显示它

例如:

YYYY-MM-DD h:mm A
//this is the format received from moment.js
然后,如果我在
C#
中有一个
DateTime
,我需要将其显示为

2018-06-14 2:30 PM
//this is equivalent with YYYY-MM-dd h:mm tt
我需要这样的东西:

string ConvertToCustomDateTimeFormat(string momentJsFormat){
   // should convert all moment.js date and time format to https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
}
string dateTimeFormat = ConvertToCustomDateTimeFormat("YYYY-MM-DD h:mm A");
//dateTimeFormat value should be YYYY-MM-dd h:mm tt
string formattedDateTime = myDateTime.ToString(dateTimeFormat);
Console.WriteLine(formattedDateTime);
// output will be 2018-06-14 2:30 PM
然后我可以这样使用它:

string ConvertToCustomDateTimeFormat(string momentJsFormat){
   // should convert all moment.js date and time format to https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
}
string dateTimeFormat = ConvertToCustomDateTimeFormat("YYYY-MM-DD h:mm A");
//dateTimeFormat value should be YYYY-MM-dd h:mm tt
string formattedDateTime = myDateTime.ToString(dateTimeFormat);
Console.WriteLine(formattedDateTime);
// output will be 2018-06-14 2:30 PM

我在中找到了一个函数,可以将日期和时间格式从
C#
转换为
moment.js
。因此,我创建了一个函数来做相反的事情(从
moment.js
C#
)。我把它贴在这里,以防有人也需要它

/// <summary>
/// Class to help convert moment.js date and time format to C# format
/// </summary>
public static class MomentJSConverter
{
    private enum State
    {
        None,
        LowerA,
        CapitalA,
        LowerD1,
        LowerD2,
        LowerD3,
        LowerD4,
        CapitalD1,
        CapitalD2,
        LowerH1,
        LowerH2,
        CapitalH1,
        CapitalH2,
        LowerM1,
        LowerM2,
        CapitalM1,
        CapitalM2,
        CapitalM3,
        CapitalM4,
        LowerS1,
        LowerS2,
        CapitalS1,
        CapitalS2,
        CapitalS3,
        CapitalS4,
        CapitalS5,
        CapitalS6,
        CapitalS7,
        CapitalY1,
        CapitalY2,
        CapitalY3,
        CapitalY4,
        CapitalZ
    }

    public static string GenerateCSharpFormatString(string momentJsFormat)
    {
        StringBuilder resultBuilder = new StringBuilder();
        State resultState = State.None;
        StringBuilder tokenBuffer = new StringBuilder();

        var ChangeState = new Action<State>((State fNewState) =>
        {
            switch (resultState)
            {
                case State.LowerA:
                case State.CapitalA:
                    resultBuilder.Append("tt");
                    break;
                case State.LowerD3:
                    resultBuilder.Append("ddd");
                    break;
                case State.LowerD4:
                    resultBuilder.Append("dddd");
                    break;
                case State.CapitalD1:
                    resultBuilder.Append("d");
                    break;
                case State.CapitalD2:
                    resultBuilder.Append("dd");
                    break;
                case State.LowerH1:
                    resultBuilder.Append("h");
                    break;
                case State.LowerH2:
                    resultBuilder.Append("hh");
                    break;
                case State.CapitalH1:
                    resultBuilder.Append("H");
                    break;
                case State.CapitalH2:
                    resultBuilder.Append("HH");
                    break;
                case State.LowerM1:
                    resultBuilder.Append("m");
                    break;
                case State.LowerM2:
                    resultBuilder.Append("mm");
                    break;
                case State.CapitalM1:
                    resultBuilder.Append("M");
                    break;
                case State.CapitalM2:
                    resultBuilder.Append("MM");
                    break;
                case State.CapitalM3:
                    resultBuilder.Append("MMM");
                    break;
                case State.CapitalM4:
                    resultBuilder.Append("MMMM");
                    break;
                case State.LowerS1:
                    resultBuilder.Append("s");
                    break;
                case State.LowerS2:
                    resultBuilder.Append("ss");
                    break;
                case State.CapitalS1:
                    resultBuilder.Append("f");
                    break;
                case State.CapitalS2:
                    resultBuilder.Append("ff");
                    break;
                case State.CapitalS3:
                    resultBuilder.Append("fff");
                    break;
                case State.CapitalS4:
                    resultBuilder.Append("ffff");
                    break;
                case State.CapitalS5:
                    resultBuilder.Append("fffff");
                    break;
                case State.CapitalS6:
                    resultBuilder.Append("ffffff");
                    break;
                case State.CapitalS7:
                    resultBuilder.Append("fffffff");
                    break;
                case State.CapitalY2:
                    resultBuilder.Append("yy");
                    break;
                case State.CapitalY4:
                    resultBuilder.Append("yyyy");
                    break;
                case State.CapitalZ:
                    resultBuilder.Append("zzz");
                    break;
            }

            tokenBuffer.Clear();
            resultState = fNewState;
        });

        foreach (var character in momentJsFormat)
        {
            switch (character)
            {
                case 'a':
                    switch (resultState)
                    {
                        case State.LowerA:
                            break;
                        default:
                            ChangeState(State.LowerA);
                            break;
                    }
                    break;
                case 'A':
                    switch (resultState)
                    {
                        case State.CapitalA:
                            break;
                        default:
                            ChangeState(State.CapitalA);
                            break;
                    }
                    break;
                case 'd':
                    switch (resultState)
                    {
                        case State.LowerD1:
                            resultState = State.LowerD2;
                            break;
                        case State.LowerD2:
                            resultState = State.LowerD3;
                            break;
                        case State.LowerD3:
                            resultState = State.LowerD4;
                            break;
                        case State.LowerD4:
                            break;
                        default:
                            ChangeState(State.LowerD1);
                            break;
                    }
                    break;
                case 'D':
                    switch (resultState)
                    {
                        case State.CapitalD1:
                            resultState = State.CapitalD2;
                            break;
                        case State.CapitalD2:
                            break;
                        default:
                            ChangeState(State.CapitalD1);
                            break;
                    }
                    break;
                case 'h':
                    switch (resultState)
                    {
                        case State.LowerH1:
                            resultState = State.LowerH2;
                            break;
                        case State.LowerH2:
                            break;
                        default:
                            ChangeState(State.LowerH1);
                            break;
                    }
                    break;
                case 'H':
                    switch (resultState)
                    {
                        case State.CapitalH1:
                            resultState = State.CapitalH2;
                            break;
                        case State.CapitalH2:
                            break;
                        default:
                            ChangeState(State.CapitalH1);
                            break;
                    }
                    break;
                case 'm':
                    switch (resultState)
                    {
                        case State.LowerM1:
                            resultState = State.LowerM2;
                            break;
                        case State.LowerM2:
                            break;
                        default:
                            ChangeState(State.LowerM1);
                            break;
                    }
                    break;
                case 'M':
                    switch (resultState)
                    {
                        case State.CapitalM1:
                            resultState = State.CapitalM2;
                            break;
                        case State.CapitalM2:
                            resultState = State.CapitalM3;
                            break;
                        case State.CapitalM3:
                            resultState = State.CapitalM4;
                            break;
                        case State.CapitalM4:
                            break;
                        default:
                            ChangeState(State.CapitalM1);
                            break;
                    }
                    break;
                case 's':
                    switch (resultState)
                    {
                        case State.LowerS1:
                            resultState = State.LowerS2;
                            break;
                        case State.LowerS2:
                            break;
                        default:
                            ChangeState(State.LowerS1);
                            break;
                    }
                    break;
                case 'S':
                    switch (resultState)
                    {
                        case State.CapitalS1:
                            resultState = State.CapitalS2;
                            break;
                        case State.CapitalS2:
                            resultState = State.CapitalS3;
                            break;
                        case State.CapitalS3:
                            resultState = State.CapitalS4;
                            break;
                        case State.CapitalS4:
                            resultState = State.CapitalS5;
                            break;
                        case State.CapitalS5:
                            resultState = State.CapitalS6;
                            break;
                        case State.CapitalS6:
                            resultState = State.CapitalS7;
                            break;
                        case State.CapitalS7:
                            break;
                        default:
                            ChangeState(State.CapitalS1);
                            break;
                    }
                    break;
                case 'Y':
                    switch (resultState)
                    {
                        case State.CapitalY1:
                            resultState = State.CapitalY2;
                            break;
                        case State.CapitalY2:
                            resultState = State.CapitalY3;
                            break;
                        case State.CapitalY3:
                            resultState = State.CapitalY4;
                            break;
                        case State.CapitalY4:
                            break;
                        default:
                            ChangeState(State.CapitalY1);
                            break;
                    }
                    break;
                case 'Z':
                    switch (resultState)
                    {
                        case State.CapitalZ:
                            break;
                        default:
                            ChangeState(State.CapitalZ);
                            break;
                    }
                    break;
                default:
                    ChangeState(State.None);
                    resultBuilder.Append(character);
                    break;
            }
        }

        ChangeState(State.None);
        return resultBuilder.ToString();
    }
}
//
///类来帮助将moment.js日期和时间格式转换为C#格式
/// 
公共静态类动量转换器
{
私有枚举状态
{
没有一个
洛维拉,
卡皮塔拉,
较低的1,
较低的2,
较低的3,
较低的4,
资本1,
Capital2,
LowerH1,
LowerH2,
资本1,
首都2,
较低的1,
较低的2,
资本金1,
资本金2,
资本金3,
资本金4,
下层1,
下层2,
资本1,
资本2,
资本3,
资本4,
资本5,
资本6,
资本7,
资本1,
资本2,
资本3,
资本4,
卡皮塔尔兹
}
公共静态字符串生成器SharpFormatString(字符串动量格式)
{
StringBuilder resultBuilder=新建StringBuilder();
状态结果状态=状态。无;
StringBuilder tokenBuffer=新的StringBuilder();
var ChangeState=新操作((状态fNewState)=>
{
开关(结果状态)
{
case State.LowerA:
case State.CapitalA:
resultBuilder.Append(“tt”);
打破
case State.LowerD3:
resultBuilder.Append(“ddd”);
打破
case State.LowerD4:
resultBuilder.Append(“dddd”);
打破
案例状态1:
resultBuilder.Append(“d”);
打破
案例状态2:
resultBuilder.Append(“dd”);
打破
案例状态1:
resultBuilder.Append(“h”);
打破
案例状态2:
resultBuilder.Append(“hh”);
打破
case State.CapitalH1:
resultBuilder.Append(“H”);
打破
案例状态.CapitalH2:
resultBuilder.Append(“HH”);
打破
case State.LowerM1:
resultBuilder.Append(“m”);
打破
案例状态.LowerM2:
resultBuilder.Append(“mm”);
打破
case State.CapitalM1:
resultBuilder.Append(“M”);
打破
case State.CapitalM2:
resultBuilder.Append(“MM”);
打破
案例状态3:
resultBuilder.Append(“MMM”);
打破
案例状态4:
resultBuilder.Append(“MMMM”);
打破
case State.LowerS1:
resultBuilder.Append(“s”);
打破
case State.LowerS2:
resultBuilder.Append(“ss”);
打破
案例状态。资本1:
resultBuilder.Append(“f”);
打破
案例状态2:
resultBuilder.Append(“ff”);
打破
案例状态。资本3:
resultBuilder.Append(“fff”);
打破
案例状态。资本4:
resultBuilder.Append(“ffff”);
打破
案例状态5:
resultBuilder.Append(“fffff”);
打破
案例状态。资本6:
resultBuilder.Append(“ffffff”);
打破
案例状态7:
resultBuilder.Append(“fffffff”);
打破
案例状态。资本2:
resultBuilder.Append(“yy”);
打破
案例状态。资本4:
resultBuilder.Append(“yyyy”);
打破
case State.capitalalz:
resultBuilder.Append(“zzz”);
打破
}
tokenBuffer.Clear();
结果状态=fNewState;
});
foreach(以momentJsFormat表示的var字符)
{
开关(字符)
{
案例“a”:
开关(结果状态)
{
case State.LowerA:
打破
违约:
ChangeState(State.LowerA);
打破
}
打破
案例“A”:
开关(结果状态)
{
case State.CapitalA:
打破
违约:
变更州(CapitalA州);
打破
}
打破
案例“d”:
开关(结果状态)
{
案例状态。Lo