java日期转换

qq_42181665 2018-09-13 10:24:09
页面传来2个时间 数据库一个是日期 一个是int 我要算出 他们相差几个月 存放int里面 应该怎么做 比如 2018-09-13 一个2018-12-22 最后得出相差 3个月 求代码 跪求 在代码里 对象里 求大神
...全文
648 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱码叔 2018-09-24
  • 打赏
  • 举报
回复
学习一下joda data。可以轻松实现。
yuji_tt 2018-09-22
  • 打赏
  • 举报
回复
三个常用类,Date,Calendar,SimpleDateFormat, 自己写几个例子研究下就可以了,这种是基础的基础
Code_Noting 2018-09-21
  • 打赏
  • 举报
回复
引用 4 楼 maradona1984 的回复:
[quote=引用 1 楼 qq_37108946 的回复:]
你根据日期的getMonth()可以得到一年之中的当前月份,然后相减就行了

跨年怎么办[/quote]可以先判断年份啊,再来看月啊
HinanaiTenshi 2018-09-21
  • 打赏
  • 举报
回复
引用 17 楼 HinanaiTenshi 的回复:
因为JSR-310提案,java8新增了一个time包,了解一下。

DateTimeFormatter normalFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
LocalDate sourceDay = LocalDate.parse("2018-09-13", normalFormatter);
LocalDate tDay = LocalDate.parse("2018-12-22", normalFormatter);
long days = ChronoUnit.DAYS.between(sourceDay, tDay);

当然,java8以前的版本也没问题,JSR-310源于joda组件,引入项目即可。
新包API提供了丰富的功能
LocalTime,与日期无关的时间点
LocalDate,与时间无关的日期
Instant,日期时间点
DateTime,带时区的日期时间点
Duration,持续时间
Period,时间段
Interval,时间间隔

抱歉,没注意求的是月份

long months = ChronoUnit.MONTHS.between(sourceDay, tDay);
HinanaiTenshi 2018-09-21
  • 打赏
  • 举报
回复
因为JSR-310提案,java8新增了一个time包,了解一下。

DateTimeFormatter normalFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
LocalDate sourceDay = LocalDate.parse("2018-09-13", normalFormatter);
LocalDate tDay = LocalDate.parse("2018-12-22", normalFormatter);
long days = ChronoUnit.DAYS.between(sourceDay, tDay);

当然,java8以前的版本也没问题,JSR-310源于joda组件,引入项目即可。
新包API提供了丰富的功能
LocalTime,与日期无关的时间点
LocalDate,与时间无关的日期
Instant,日期时间点
DateTime,带时区的日期时间点
Duration,持续时间
Period,时间段
Interval,时间间隔
fostlin 2018-09-21
  • 打赏
  • 举报
回复
把日期数据 拆成年, 月,日 分开进行判断, 年份有相差则 ;[年份差值]*12 - 小日期的月份 + 大日期的月份 头尾月份看怎么算进行调整
EvanJim 2018-09-21
  • 打赏
  • 举报
回复
一年12个月,这是绝对的。
如果date1月份大于date2,month则大于0,正常相加即可。
如果date1月份小于date2,month则小于0,month++。举例如:2017-12-8,2018-6-8。年1*12=12,月6-12=-6。12-6+1=7
qq_42181665 2018-09-20
  • 打赏
  • 举报
回复
引用 12 楼 u010808697 的回复:
	public static void main(String[] args) throws ParseException
{
System.out.println(Test.getMonthSpace("2016-5-8", "2018-6-12"));
}

public static int getMonthSpace(String date1, String date2) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();

c1.setTime(sdf.parse(date1));
c2.setTime(sdf.parse(date2));

int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
if (month < 0) month++;

return Math.abs(year * 12 + month);
}

望采纳



为什么年要*12?
qq_42181665 2018-09-20
  • 打赏
  • 举报
回复
什么年要*12?
EvanJim 2018-09-20
  • 打赏
  • 举报
回复
	public static void main(String[] args) throws ParseException
{
System.out.println(Test.getMonthSpace("2016-5-8", "2018-6-12"));
}

public static int getMonthSpace(String date1, String date2) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();

c1.setTime(sdf.parse(date1));
c2.setTime(sdf.parse(date2));

int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
if (month < 0) month++;

return Math.abs(year * 12 + month);
}

望采纳
qq_42181665 2018-09-20
  • 打赏
  • 举报
回复
引用 10 楼 幽饮烛 的回复:
不建议转毫秒算,不同月份天数不一样
可以用 jdk 1.8 的时间类
Period period = Period.between(LocalDate.of(2018, 9, 13), LocalDate.of(2018, 12, 22)).normalized();
System.out.println(period.getMonths()); // 不跨年
System.out.println(period.getYears() * 12 + period.getMonths()); // 跨年
如果有天数差 period.getDays() != 0 就看具体业务是不到一个月算一个月或者不管天数,
注意,如果第一个时间大于第二个时间,那么 getMonths getYears getDays可能会是负数。
为什么跨年年要乘以12
幽饮烛 2018-09-15
  • 打赏
  • 举报
回复
不建议转毫秒算,不同月份天数不一样
可以用 jdk 1.8 的时间类
Period period = Period.between(LocalDate.of(2018, 9, 13), LocalDate.of(2018, 12, 22)).normalized();
System.out.println(period.getMonths()); // 不跨年
System.out.println(period.getYears() * 12 + period.getMonths()); // 跨年
如果有天数差 period.getDays() != 0 就看具体业务是不到一个月算一个月或者不管天数,
注意,如果第一个时间大于第二个时间,那么 getMonths getYears getDays可能会是负数。
第6程序员 2018-09-15
  • 打赏
  • 举报
回复
可以先转成毫秒值,再换算成天数
wka591399669 2018-09-14
  • 打赏
  • 举报
回复
二楼说的对。。。
z437789800 2018-09-14
  • 打赏
  • 举报
回复
二楼说的对。。。
老飞侠yll 2018-09-14
  • 打赏
  • 举报
回复
二楼说的对。。。
sails_z 2018-09-14
  • 打赏
  • 举报
回复
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class D1 {
public static void main(String[] args) throws ParseException {
System.out.println(D1.getMonthSpace("2018-5-8", "2018-6-12"));
}

public static int getMonthSpace(String date1, String date2) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();

c1.setTime(sdf.parse(date1));
c2.setTime(sdf.parse(date2));


int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);

return Math.abs(year*12+month);

}
}
蜜友 2018-09-13
  • 打赏
  • 举报
回复
至于数据库 1一个存 d1, 另一个存 d2.getTime就可以了.
蜜友 2018-09-13
  • 打赏
  • 举报
回复

public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse("2018-09-13");
Date d2 = sdf.parse("2018-12-22");
long n = d2.getTime() - d1.getTime();
System.out.println(n /(1000* 60 * 60 * 24 * 30l)+"个月");
}
qq_37108946 2018-09-13
  • 打赏
  • 举报
回复
你根据日期的getMonth()可以得到一年之中的当前月份,然后相减就行了
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧