我已经让这个方法过生日,但我想知道我是否可以在一个字符串中识别月份和日期的数字
例如
930421是正确的 931360不正确
print (mi)
A B C
AA BB1 BB2 CC
0 1 text 5 7
1 2 text2 6 8
2 3 text3 7 9
cols = list(zip(si.columns, range(si.shape[1])))
si.columns = pd.MultiIndex.from_tuples(cols)
print (si)
A D E
0 1 2
0 text T1 1
1 text2 T2 2
2 text3 T3 3
df = (pd.merge(mi,si, left_on=[('B','BB1'),('A','AA')], right_on=[('A', 0), ('E', 2)])
.drop([('A', 0), ('E', 2)], axis=1))
print (df)
A B C D
AA BB1 BB2 CC 1
0 1 text 5 7 T1
1 2 text2 6 8 T2
2 3 text3 7 9 T3
答案 0 :(得分:2)
您可以将SimpleDateFormat
与yyMMdd
等模式一起使用。确保使用setLenient(false)
使解析器“严格”,这样它实际上会在无效日期引发异常。
SimpleDateFormat format = new SimpleDateFormat("yyMMdd");
format.setLenient(false);
示例:
System.out.println(format.parse("930421"));
System.out.println(format.parse("931360"));
输出:
Wed Apr 21 00:00:00 CEST 1993
Exception in thread "main" java.text.ParseException: Unparseable date: "931360"
at java.text.DateFormat.parse(DateFormat.java:366)
at Test.main(Test.java:12)
你可以像这样使用它:
try {
Date date = format.parse(dateString);
System.out.println("Your birthday is " + date);
} catch (ParseException e) {
System.out.println("That's not a date");
}
答案 1 :(得分:1)
这是你的答案。 它按照你的期望工作:)
static boolean dob = true;
public static void main(String[] args) {
setFirst("931360", 0, 0, 0);
setFirst("930421", 0, 0, 0);
}
public static void setFirst(String firstn, int y, int m,int d) {
String first = firstn;
if (first.length() == 6){
y=Integer.parseInt(first.substring(0, 2));
if(y<0 || y>99)
{dob=false;}
m=Integer.parseInt(first.substring(2, 4));
if(m<1 || m>12)
{dob=false;}
d=Integer.parseInt(first.substring(4, 6));
if(d<0 || d>31)
{dob=false;}
if(dob)
{System.out.println("Your birthday is :" +first);}
}if(!dob) {
System.out.println("error");
}
}
答案 2 :(得分:0)
假设您的日期格式为yy-mm-dd,您可以:(头脑简单但易于实施解决方案)
1)使用String.substring
获取您需要的字符串片段(例如,yy的前两位数字),
2)用Integer.parseInt
3)并根据范围检查它们(例如,对于yy,它可能在20到99之间)。
请注意,yy是一个非常容易出错的代表(例如1910和2010以相同的方式表示)所以你应该考虑使用yyyy。