从“转换日期字符串”;“ddMMM”;变成;yyyy-MM-dd“;使用Java8
我们需要将日期字符串“ddMMM”转换为“yyyy-MM-dd”从“转换日期字符串”;“ddMMM”;变成;yyyy-MM-dd“;使用Java8,java,simpledateformat,datetime-format,date-conversion,localtime,Java,Simpledateformat,Datetime Format,Date Conversion,Localtime,我们需要将日期字符串“ddMMM”转换为“yyyy-MM-dd” 例如:“9月30日”->“2019-09-30”和“1月15日”->“2020-01-15”(如果当前年份的日期为过去,则取下一年的日期)您可以将仅日期和月份的输入作为字符串数组。 使用获取当前日期 现在你有了两个价值观。。。比较两者并将年份添加到日期 import java.util.Calendar; import java.util.Scanner; public class DateCalendar { publ
例如:“9月30日”->“2019-09-30”和“1月15日”->“2020-01-15”(如果当前年份的日期为过去,则取下一年的日期)您可以将仅日期和月份的输入作为字符串数组。 使用获取当前日期 现在你有了两个价值观。。。比较两者并将年份添加到日期
import java.util.Calendar;
import java.util.Scanner;
public class DateCalendar {
public static void main(String ar[]){
String[] monthName = {"January", "February",
"March", "April", "May", "June", "July",
"August", "September", "October", "November",
"December"};
int count = 0;
int presentMonth =0;
int userMonth = 0;
int finalYear = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Enter Date :");
int userdate = sc.nextInt();
System.out.println("Enter Month :");
String usrMonth = sc.next();
Calendar now = Calendar.getInstance();
int presentDate = now.get(Calendar.DATE);
presentMonth = (now.get(Calendar.MONTH))+1;
//Convert user input Month String to int
count = 0;
while(count<12){
if(monthName[count].equals(usrMonth)){
userMonth = count + 1;
// array starts from 0
break;
}
else{
count++;
}
}
//convert to final year and
if(userMonth<presentMonth){
finalYear = (now.get(Calendar.YEAR))+1;
}
else if(userMonth>presentMonth){
System.out.println("THe userMonth is : "+userMonth+" and presentMonth is : "+presentMonth);
finalYear = now.get((Calendar.YEAR));
}
else if(userMonth==presentMonth){
if(userdate>=presentDate){
finalYear = now.get((Calendar.YEAR));
}
else if(userdate<presentDate){
finalYear = (now.get(Calendar.YEAR))+1;
}
}
System.out.println("THe final year is : "+finalYear);
System.out.println("THe final month is "+monthName[userMonth-1]);
System.out.println("the final date is : "+userdate);
}
}`
import java.util.Calendar;
导入java.util.Scanner;
公共类日期日历{
公共静态void main(字符串ar[]{
字符串[]monthName={“一月”、“二月”,
“三月”、“四月”、“五月”、“六月”、“七月”,
“八月”、“九月”、“十月”、“十一月”,
“12月”};
整数计数=0;
int presentMonth=0;
int userMonth=0;
int finalYear=0;
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入日期:”);
int userdate=sc.nextInt();
System.out.println(“输入月份:”);
字符串usrMonth=sc.next();
Calendar now=Calendar.getInstance();
int presentDate=now.get(Calendar.DATE);
presentMonth=(now.get(Calendar.MONTH))+1;
//将用户输入的月份字符串转换为int
计数=0;
while(计数=当前日期){
finalYear=now.get((日历年));
}
else if(userdateDateTimeFormatter)是解析日期和时间的好工具,但它需要一年作为输入。这需要当前年份,但如果输出的日期早于现在,则添加一年
String dateString = "29FEB";
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("ddMMMyyyy").toFormatter();
LocalDate dateOfInterest = LocalDate.parse( dateString + LocalDate.now().getYear(), dateTimeFormatter );
if( dateOfInterest.isBefore( LocalDate.now() ) )
dateOfInterest = LocalDate.parse( dateString + LocalDate.now().plusYears(1).getYear(), dateTimeFormatter );
然后LocalDate可以转换为字符串,格式如下所示
dateOfInterest.format( DateTimeFormatter.ofPattern( "yyy-MM-dd" ) );
MonthDay
Evan给出的答案很好,但我建议解析你的输入:一个月一天。有一个这样的类!参见
现在确定一个日期。为此,你需要一个时区。对于任何给定的时刻,全球各地的日期因区域而异
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
比较一下
LocalDate target = md.atYear( today.getYear() ) ;
if( target.isBefore( today ) ) {
target.plusYears( 1 ) ;
}
@埃文,看起来就像“为我做我的工作”来自新手的问题。我有点厌倦了。IMHO的回答没有帮助…这些糟糕的日期时间类在几年前被值得采用JSR 310的java.time类取代。我怀疑这段代码在2月29日失败。但我还没有验证这个问题。你是对的,2019年2月29日的结果是returns 2020-02-28,如原稿所示。相应更新。我不知道MonthDay,因此感谢您在回答中向我展示了一些新内容。自从我学到了一些新内容(MonthDay课程)后,我进行了升级投票,但我相信您需要处理2月29日的同一期?我观察到Java将把您的本地日期2019年2月29日改为2019年2月28日。因此,用md.atYear(today.plusYears(1.getYear())替换target.plusYears(1)可能是一个更健壮的解决方案。Java_教授,我的答案是使用LocalDate.now()如果运行此代码的计算机位于您想要推断的区域内,则“无区域”可以工作,因为该重载使用系统时区。但如果不是,则需要Basil的代码来显式设置区域。我建议始终显式传递时区。即使您想要JVM的当前默认时区,也可以调用ZoneId、 systemDefault
。否则,隐式依赖默认值的代码是不明确的,因为许多程序员要么不知道时区问题,要么忘记了考虑时区问题。
LocalDate target = md.atYear( today.getYear() ) ;
if( target.isBefore( today ) ) {
target.plusYears( 1 ) ;
}