交换 4 位日期字符串中的月份和年份
Swapping the month and the year in a 4 digit date string
基本上,我接受过期日期。比方说 12/24。我提交的 API 非常具体,没有斜线,年份必须在前面。
删除斜杠很容易:
var dt = Convert.ToString(payment.ExpirationDate.Replace("/", string.Empty));
所以,现在我有一个字符串中的 4 位数字,我想我也可以 Convert.ToInt32
并有一个整数。
但无论哪种方式,我都不确定如何拆分和交换。对于字符串,它需要一个字符,而不是数字。
删除斜杠后
public static string ReverseString(this string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
示例:
var dt = Convert.ToString(payment.ExpirationDate.Replace("/", string.Empty));
var dt2 = dt.ReverseString();
使用正则表达式从两个单独变量中的输入字符串中提取年份 + 月份。然后你就可以reorder/format他们想干什么就干什么。
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var regexTest = new Regex(@"(?<month>\d{2})/(?<year>\d{2})");
var input = "12/24";
var match = regexTest.Match(input);
if(match.Success) {
var monthValue = match.Groups["month"];
var yearValue = match.Groups["year"];
Console.WriteLine($"{yearValue} - {monthValue}");
}
}
}
您可以使用 ParseExact
:
将原始字符串转换为 DateTime
对象
DateTime.ParseExact(payment.ExpirationDate, "MM/yy", null)
这样,将 DateTime
对象格式化为“yyMM”就非常容易了:
datetime.ToString("yyMM")
使用您提供的字符串的完整示例:
Console.WriteLine(DateTime.ParseExact("12/24", "MM/yy", null).ToString("yyMM"));
输出为:
2412
由于您要处理日期,因此您可能应该使用 DateTime
。这允许您验证日期并生成您想要的任何其他格式。
像这样的东西应该可以完成工作:
string input = "12/24";
DateTime date = DateTime.ParseExact(input, "MM/yy", CultureInfo.CurrentCulture);
string output = date.ToString("yyMM");
如果您确定日期格式正确,请使用以上方法。如果没有,您可以使用以下方式验证它:
bool isValid = DateTime.TryParseExact(input, "MM/yy", CultureInfo.CurrentCulture,
DateTimeStyles.None, out DateTime date);
if (isValid)
{
string output = date.ToString("yyMM");
//...
}
else { /* Do something about it */ }
为避免将世纪误认为 50 年或以上 (as addressed in the comments),您可以创建自定义 CultureInfo 并更改 TwoDigitYearMax
属性:
CultureInfo myCultureInfo = new CultureInfo(CultureInfo.CurrentCulture.LCID);
myCultureInfo.Calendar.TwoDigitYearMax = 2099;
然后,您将 myCultureInfo
而不是 CultureInfo.CurrentCulture
传递给 ParseExact()
或 TryParseExact()
。
基本上,我接受过期日期。比方说 12/24。我提交的 API 非常具体,没有斜线,年份必须在前面。
删除斜杠很容易:
var dt = Convert.ToString(payment.ExpirationDate.Replace("/", string.Empty));
所以,现在我有一个字符串中的 4 位数字,我想我也可以 Convert.ToInt32
并有一个整数。
但无论哪种方式,我都不确定如何拆分和交换。对于字符串,它需要一个字符,而不是数字。
删除斜杠后
public static string ReverseString(this string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
示例:
var dt = Convert.ToString(payment.ExpirationDate.Replace("/", string.Empty));
var dt2 = dt.ReverseString();
使用正则表达式从两个单独变量中的输入字符串中提取年份 + 月份。然后你就可以reorder/format他们想干什么就干什么。
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var regexTest = new Regex(@"(?<month>\d{2})/(?<year>\d{2})");
var input = "12/24";
var match = regexTest.Match(input);
if(match.Success) {
var monthValue = match.Groups["month"];
var yearValue = match.Groups["year"];
Console.WriteLine($"{yearValue} - {monthValue}");
}
}
}
您可以使用 ParseExact
:
DateTime
对象
DateTime.ParseExact(payment.ExpirationDate, "MM/yy", null)
这样,将 DateTime
对象格式化为“yyMM”就非常容易了:
datetime.ToString("yyMM")
使用您提供的字符串的完整示例:
Console.WriteLine(DateTime.ParseExact("12/24", "MM/yy", null).ToString("yyMM"));
输出为:
2412
由于您要处理日期,因此您可能应该使用 DateTime
。这允许您验证日期并生成您想要的任何其他格式。
像这样的东西应该可以完成工作:
string input = "12/24";
DateTime date = DateTime.ParseExact(input, "MM/yy", CultureInfo.CurrentCulture);
string output = date.ToString("yyMM");
如果您确定日期格式正确,请使用以上方法。如果没有,您可以使用以下方式验证它:
bool isValid = DateTime.TryParseExact(input, "MM/yy", CultureInfo.CurrentCulture,
DateTimeStyles.None, out DateTime date);
if (isValid)
{
string output = date.ToString("yyMM");
//...
}
else { /* Do something about it */ }
为避免将世纪误认为 50 年或以上 (as addressed in the comments),您可以创建自定义 CultureInfo 并更改 TwoDigitYearMax
属性:
CultureInfo myCultureInfo = new CultureInfo(CultureInfo.CurrentCulture.LCID);
myCultureInfo.Calendar.TwoDigitYearMax = 2099;
然后,您将 myCultureInfo
而不是 CultureInfo.CurrentCulture
传递给 ParseExact()
或 TryParseExact()
。