我有一个数据格式的字符串fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
。
例如,我想回去1天,所以我想得到fastcgi.conf
。
我该怎么做?
请注意,它也可能是apr 17,2016
,因此索引处的替换无效。
答案 0 :(得分:2)
您可以使用 Java 8 。
只需转换为LocalDate即可。由于种种原因,它具有灵活的API。
以下是代码段:
public static void main(String[] args) throws ParseException {
String dateStr = "apr 17,2016";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd,uuuu");
// convert to local date
LocalDate localDate = LocalDate.parse(dateStr, formatter.withLocale(Locale.ITALIAN));
System.out.println("START DATE:\n" + localDate);
// use all power of new java.time
LocalDate oneDayBefore = localDate.minusDays(1);
LocalDate oneMonthBefore = localDate.minusMonths(1);
LocalDate oneWeekBefore = localDate.minusWeeks(1);
LocalDate oneYearBefore = localDate.minusYears(1);
System.out.println("RESULTS:");
System.out.println(oneDayBefore);
System.out.println(oneMonthBefore);
System.out.println(oneWeekBefore);
System.out.println(oneYearBefore);
}
<强>输出:强>
START DATE:
2016-04-17
RESULTS:
2016-04-16
2016-03-17
2016-04-10
2015-04-17
现在您需要将本地日期打印为字符串。
以下是示例:
// use Java 8 features
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd,yyyy");
String dt = dtf.format(oneDayBefore);
System.out.println(dt);
<强>输出:强>
Apr 16,2016
答案 1 :(得分:2)
LocalDate.parse (
"apr 17,2016" ,
DateTimeFormatter.ofPattern ( "MMM dd,uuuu" ).withLocale( locale )
)
现代方式是使用java.time类。
您没有指定用于输入字符串的语言环境或人类语言。月份名称缩写中的初始小写字母不适合美国英语。所以我尝试了Java 8 Update 121提供的所有语言环境,忽略了因异常而失败的任何解析尝试。
注意我们如何在循环中调用DateTimeFormatter::withLocale
。 Locale
确定(a)用于翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大小写,标点符号,分隔符等问题的文化规范。
您可以通过拨打LocalDate::minusDays
来完成前一天的日期时间数学运算。
String input = "apr 17,2016";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM dd,uuuu" );
for ( Locale locale : Locale.getAvailableLocales ( ) ) {
try {
LocalDate ld = LocalDate.parse ( input, f.withLocale ( locale ) );
System.out.println ( locale.getDisplayName ( ) + " → " + ld + " | day before: " + ld.minusDays ( 1 ) );
} catch ( java.time.format.DateTimeParseException e ) {
// Swallow this expected exception. No code needed here.
}
}
System.out.println ( "Done." );
十九岁。
Italian → 2016-04-17 | day before: 2016-04-16
Swedish (Sweden) → 2016-04-17 | day before: 2016-04-16
Slovak → 2016-04-17 | day before: 2016-04-16
Estonian → 2016-04-17 | day before: 2016-04-16
Swedish → 2016-04-17 | day before: 2016-04-16
Serbian (Latin,Bosnia and Herzegovina) → 2016-04-17 | day before: 2016-04-16
Serbian (Latin,Montenegro) → 2016-04-17 | day before: 2016-04-16
Norwegian (Norway,Nynorsk) → 2016-04-17 | day before: 2016-04-16
Estonian (Estonia) → 2016-04-17 | day before: 2016-04-16
Serbian (Latin) → 2016-04-17 | day before: 2016-04-16
Dutch → 2016-04-17 | day before: 2016-04-16
Norwegian (Norway) → 2016-04-17 | day before: 2016-04-16
Dutch (Netherlands) → 2016-04-17 | day before: 2016-04-16
Italian (Switzerland) → 2016-04-17 | day before: 2016-04-16
Slovak (Slovakia) → 2016-04-17 | day before: 2016-04-16
Italian (Italy) → 2016-04-17 | day before: 2016-04-16
Dutch (Belgium) → 2016-04-17 | day before: 2016-04-16
Norwegian → 2016-04-17 | day before: 2016-04-16
Serbian (Latin,Serbia) → 2016-04-17 | day before: 2016-04-16
Done.
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:1)
**注意:你应该使用日期类而不是字符串,但是有比我在这里使用的更好的类。 **我将编辑此答案以反映这一点,但您应该查看更适合当前Java版本的解决方案以及此处请求的精度(日期而不是毫秒)。
最强大的方法是将您的字符串转换为日期类,操纵日期,然后重新格式化。可以使用SimpleDateFormat类(Api docs)完成每个方向的转换,并且可以使用Calendar类(API docs)轻松完成日期更改
这会运行并从参数中获取日期,并按照您的要求输出减去一天的格式。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
public class DateSubtractExample{
public static String backOneDay(String inDate){
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd,yyyy");
try{
// turn your string into a date (if formatting is right)
Date date1 = formatter.parse(inDate);
// make a calendar, set it to the date, and subtract one day.
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
cal.add(Calendar.DATE,-1);
// convert date back to input format.
return formatter.format(cal.getTime());
}
catch (ParseException bad){
bad.printStackTrace();
return "UNREADABLE DATE "+inDate+":"+bad;
}
}
public static void main(String[] args) throws ParseException{
System.out.println(DateSubtractExample.backOneDay(args[0]));
}
}
答案 3 :(得分:0)
public String getPreviousDate(String oldDate) {
String[] parts1 = oldDate.split(" "); // split the oldDate around " "
String[] parts2 = parts1[1].split(","); // split the second part of oldDate around ","
String month = parts1[0];
int day = Integer.parseInt(parts2[0]);
int year = Integer.parseInt(parts2[1]);
...
return newDate;
}
答案 4 :(得分:0)
这将按照您的要求运行,请尝试这个经过测试的程序,因此无需担心
import java.text.SimpleDateFormat;
import java.util.*;
public class DateExample{
public static void main(String args[]) throws Exception {
String date = "apr 16,2016";
SimpleDateFormat formatter=new SimpleDateFormat("MMM dd,yyyy");
Date dateFormated =formatter.parse(date);
System.out.println(dateFormated);
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(dateFormated);
cal.add(Calendar.DATE, -1);
Date newDate = cal.getTime();
String stringDate = formatter.format(newDate);
System.out.println(stringDate);
}
}
答案 5 :(得分:0)
我觉得我不清楚你问的问题。我看到两个问题,一个与替换部分字符串有关,另一个与日期有关。我猜你的问题是关于约会的。所以我试图回答你的问题,想要将当前日期减少一天。
为此,您可以使用日历界面。
Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
cal.add(Calendar.DAY_OF_YEAR,-1);
Date oneDayBefore= cal.getTime();
答案 6 :(得分:-1)
所以,Id使用string.split(“,”)。 示例代码:
String date="apr 1,2016";
String[] parts=date.split(",");
String month_and_day=parts[0];
String year=parts[1];
String[] parts_of_month_and_day=month_and_day.split(" ");
String month=parts_of_month_and_day[0];
String day=parts_of_month_and_day[1];
int m;
int d;
int y;
y=Integer.parseInt(year);
d=Integer.parseInt(day);
String[] months=new String[] {"jan","feb","mar","apr","may","jun","jul","aug","sep","okt","nov","dez"};
for (int i=0; i < 12 /*length of months*/; i++) {
if (months[i].equals(month)) {
m=i;
}
}