Android在7天(一周)之前获取日期

Jov*_*van 37 java android date

如何在此之前的一周内以这种格式在android中获取日期:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

前:现在2010-09-19 HH:mm:ss,一周之前2010-09-12 HH:mm:ss

谢谢

Dan*_*yer 97

解析日期:

Date myDate = dateFormat.parse(dateString);
Run Code Online (Sandbox Code Playgroud)

然后要么计算出你需要减去多少毫秒:

Date newDate = new Date(myDate.getTime() - 604800000L); // 7 * 24 * 60 * 60 * 1000
Run Code Online (Sandbox Code Playgroud)

或者使用java.util.Calendar该类提供的API :

Calendar calendar = Calendar.getInstance();
calendar.setTime(myDate);
calendar.add(Calendar.DAY_OF_YEAR, -7);
Date newDate = calendar.getTime();
Run Code Online (Sandbox Code Playgroud)

然后,如果需要,将其转换回String:

String date = dateFormat.format(newDate);
Run Code Online (Sandbox Code Playgroud)

  • 我认为情况恰恰相反:roll()在日期调用时不处理月/年变化,而add()表示. (7认同)

Pra*_*ani 18

我创建了自己的函数,可能有助于获取下一个/上一个日期

当前的日期:

/**
 * Pass your date format and no of days for minus from current 
 * If you want to get previous date then pass days with minus sign
 * else you can pass as it is for next date
 * @param dateFormat
 * @param days
 * @return Calculated Date
 */
public static String getCalculatedDate(String dateFormat, int days) {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat s = new SimpleDateFormat(dateFormat);
    cal.add(Calendar.DAY_OF_YEAR, days);
    return s.format(new Date(cal.getTimeInMillis()));
}
Run Code Online (Sandbox Code Playgroud)

例:

getCalculatedDate("dd-MM-yyyy", -10); // It will gives you date before 10 days from current date

getCalculatedDate("dd-MM-yyyy", 10);  // It will gives you date after 10 days from current date
Run Code Online (Sandbox Code Playgroud)

如果您想通过自己的日期获得计算日期:

public static String getCalculatedDate(String date, String dateFormat, int days) {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat s = new SimpleDateFormat(dateFormat);
    cal.add(Calendar.DAY_OF_YEAR, days);
    try {
        return s.format(new Date(s.parse(date).getTime()));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        Log.e("TAG", "Error in Parsing Date : " + e.getMessage());
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

传递自己的日期示例:

getCalculatedDate("01-01-2015", "dd-MM-yyyy", -10); // It will gives you date before 10 days from given date

getCalculatedDate("01-01-2015", "dd-MM-yyyy", 10);  // It will gives you date after 10 days from given date
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 6

tl; dr

LocalDate
    .now( ZoneId.of( "Pacific/Auckland" ) )           // Get the date-only value for the current moment in a specified time zone.
    .minusWeeks( 1 )                                  // Go back in time one week.
    .atStartOfDay( ZoneId.of( "Pacific/Auckland" ) )  // Determine the first moment of the day for that date in the specified time zone.
    .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a string in standard ISO 8601 format.
    .replace( "T" , " " )                             // Replace the standard "T" separating date portion from time-of-day portion with a SPACE character.
Run Code Online (Sandbox Code Playgroud)

java.time

现代方法使用java.time类。

LocalDate级表示没有时间一天和不同时区的日期,唯一的价值。

时区对于确定日期至关重要。在任何给定的时刻,日期都会在全球范围内变化。例如,法国巴黎午夜过后的几分钟是新的一天,而在魁北克蒙特利尔仍然是“昨天” 。

指定适当的时区名称,格式continent/region,如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用3-4个字母的缩写,例如EST或,IST因为它们不是真实的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.forID( "America/Montreal" ) ;
LocalDate now = LocalDate.now ( z ) ;
Run Code Online (Sandbox Code Playgroud)

使用minus…plus…方法进行一些数学运算。

LocalDate weekAgo = now.minusWeeks( 1 );
Run Code Online (Sandbox Code Playgroud)

让java.time确定所需时区的第一天。不要以为一天开始于00:00:00。诸如“夏令时”之类的异常表示一天可能在另一个时间开始,例如01:00:00

ZonedDateTime weekAgoStart = weekAgo.atStartOfDay( z ) ;
Run Code Online (Sandbox Code Playgroud)

ZonedDateTime使用DateTimeFormatter对象生成表示该对象的字符串。在Stack Overflow中搜索有关该课程的更多讨论。

DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ;
String output = weekAgoStart.format( f ) ;
Run Code Online (Sandbox Code Playgroud)

该标准格式接近您想要的格式,但是T中间有一个您想要SPACE的位置。因此,请用SPACE代替T

output = output.replace( "T" , " " ) ;
Run Code Online (Sandbox Code Playgroud)

关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

在哪里获取java.time类?

乔达时代

更新: Joda-Time项目现在处于维护模式。该团队建议迁移到java.time类。

使用Joda-Time库使日期时间工作变得更加容易。

请注意使用时区。如果省略,则说明您正在使用UTC或JVM的当前默认时区。

DateTime now = DateTime.now ( DateTimeZone.forID( "America/Montreal" ) ) ;
DateTime weekAgo = now.minusWeeks( 1 );
DateTime weekAgoStart = weekAgo.withTimeAtStartOfDay();
Run Code Online (Sandbox Code Playgroud)