时差节目

2024-01-04

我正在使用以下函数来计算时差。它没有显示正确的输出。 1 个月的时差后显示 2 分钟的差异。

我的程序出了什么问题?

public String TimestampDiff(Timestamp t) {
    long t1 = t.getTime();
    String st = null;
    long diff;
    java.util.Date date = new java.util.Date();
    long currT = date.getTime();
    System.out.println();
    System.out.println(" current timesstamp is  " + currT);

    diff = (currT - t1) / 60;
    int years = (int) Math.floor(diff / (1000 * 60 * 60 * 24 * 365));
    double remainder = Math.floor(diff % (1000 * 60 * 60 * 24 * 365));
    int days = (int) Math.floor(remainder / (1000 * 60 * 60 * 24));
    remainder = Math.floor(remainder % (1000 * 60 * 60 * 24));
    int hours = (int) Math.floor(remainder / (1000 * 60 * 60));
    remainder = Math.floor(remainder % (1000 * 60 * 60));
    int minutes = (int) Math.floor(remainder / (1000 * 60));
    remainder = Math.floor(remainder % (1000 * 60));
    int seconds = (int) Math.floor(remainder / (1000));
    System.out.println("\nyr:Ds:hh:mm:ss " + years + ":" + days + ":"
            + hours + ":" + minutes + ":" + seconds);

    if (years == 0 && days == 0 && hours == 0 && minutes == 0) {
        st = "few seconds ago";
    } else if (years == 0 && days == 0 && hours == 0) {
        st = minutes + " minuts ago";
    } else if (years == 0 && days == 0) {
        st = hours + " hours ago";
    } else if (years == 0 && days == 1) {
        st = new SimpleDateFormat("'yesterday at' hh:mm a").format(t1);

    } else if (years == 0 && days > 1) {
        st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(t1);

    } else if (years > 0) {
        st = new SimpleDateFormat("MMM d ''yy 'at' hh:mm a").format(t1);

    }
    st = st.replace("AM", "am").replace("PM", "pm");
    return st;
}

我建议看一下乔达时间 http://www.joda.org/joda-time/,注意到:

Joda-Time 是 Java SE 8 之前的 Java 事实上的标准日期和时间库。现在要求用户迁移到 java.time (JSR-310)。

安装

  • 对于基于 Debian 的系统:libjoda-time-java。罐子将在/usr/share/java as joda-time.jar
  • 为他人:Download https://sourceforge.net/projects/joda-time/files/joda-time/最新的罐子,例如joda-time-2.2-dist.zip 其中包括 joda-time-2.2.jar

使用 Eclipse 时,将其添加到 Java 构建路径(项目 > 属性 > Java 构建路径 > 添加外部 Jar)

相关Java文档

  • DateTime http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html
  • Period http://joda-time.sourceforge.net/apidocs/org/joda/time/Period.html
  • 周期格式化程序 http://joda-time.sourceforge.net/apidocs/org/joda/time/format/PeriodFormatter.html
  • 周期格式化程序生成器 http://joda-time.sourceforge.net/apidocs/org/joda/time/format/PeriodFormatterBuilder.html

示例代码

import java.sql.Timestamp;
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;

public class MinimalWorkingExample {
    static Date date = new Date(1990, 4, 28, 12, 59);

    public static String getTimestampDiff(Timestamp t) {
        final DateTime start = new DateTime(date.getTime());
        final DateTime end = new DateTime(t);
        Period p = new Period(start, end);
        PeriodFormatter formatter = new PeriodFormatterBuilder()
                .printZeroAlways().minimumPrintedDigits(2).appendYears()
                .appendSuffix(" year", " years").appendSeparator(", ")
                .appendMonths().appendSuffix(" month", " months")
                .appendSeparator(", ").appendDays()
                .appendSuffix(" day", " days").appendSeparator(" and ")
                .appendHours().appendLiteral(":").appendMinutes()
                .appendLiteral(":").appendSeconds().toFormatter();
        return p.toString(formatter);
    }

    public static void main(String[] args) {
        String diff = getTimestampDiff(new Timestamp(2013, 3, 20, 7, 51, 0, 0));
        System.out.println(diff);
    }
}

Output:

22 years, 10 months, 01 day and 18:52:00

为什么我推荐新的解决方案

  • 它更短(726 个字符/14 行,而您的 1665 个字符/41 行)
  • 更容易理解
  • 调整起来比较容易
  • 代码和表示的分离更加清晰
  • 我不想修复你的代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

时差节目 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 无法捕获 Spring Batch 的 ItemWriter 中的异常

    我正在编写一个 Spring Batch 流程来将数据集从一个系统迁移到另一个系统 在这种情况下 这就像使用RowMapper实现在传递给查询之前从查询构建对象ItemWriter The ItemWriter称为save我的 DAO 上的
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • 内的

    我制作了一个简单的 html 片段 其中包含以下内容 a href div Something here div a 它显然提醒我 div 不能位于 a 标签 我使用了 div 因为我希望整个框 在本例中为 div 成为一个按钮 所以子类
  • 具有相交轮廓线的 Matplotlib 轮廓图

    我正在尝试使用 python 中的 matplotlib 绘制以下数据的等高线图 数据的形式是这样的 x y height 77 23 22 34 56 77 53 22 87 63 77 37 22 54 72 77 29 22 44 8
  • 使用子查询与派生表进行内连接

    环境 SQL 2008 R2 我使用子查询创建了一个派生表并与主表连接 我只是想知道子查询是否只执行一次 还是针对结果集中的每一行执行 考虑以下示例 虚构的表名称仅供参考 SELECT E EID DT Salary FROM Employ
  • 在 C# / .NET 中执行批量更新的最快方法

    我试图找出通过 SQL Server 中的迷你控制台应用程序执行批量更新的最佳方法是什么 我已经编写了自己的批量更新方式 如下所示 SqlCommand command new SqlCommand command Connection n
  • 在移动 Web 应用程序中使用 JavaScript

    我需要在移动 Web 应用程序的表单中使用 JavaScript 我需要一些有关它的信息 涉及浏览器兼容性以及在移动 Web 应用程序中使用 JavaScript 的方式 语法 这是一场噩梦 这就像 20 世纪 90 年代使用网络浏览器工作
  • 使用 Json.NET 将 JSON 反序列化为对象

    我正在玩一点新的堆栈溢出 API https blog stackoverflow com 2010 03 stack overflow api private beta starts 不幸的是 我的 JSON 有点弱 所以我需要一些帮助
  • C#:如何在特定时间启动线程[重复]

    这个问题在这里已经有答案了 如何在一天中的特定时间 例如 16 00 启动后台线程 因此 当应用程序启动时 线程将等待那个时间 但如果应用程序在那之后启动 那么线程将立即运行 ThreadPool QueueUserWorkItem Met
  • 适用于 SDK 环境的 Android 名片扫描仪库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有名片扫描仪的库 我是 Android 新手 帮帮我 提前致谢 工具信息 ABBYY 移动 OCR
  • 让整个CSS表变得很重要!

    有没有办法让整个 CSS 样式表优先于另一个样式表 我知道你可以做到这一点 重要的是 但我可以用一行来做到这一点 而不是修改工作表上的所有数千个属性吗 Thanks 确保您想要的样式表最后调用 或者您想要的特定样式最后调用 例如 使用这个
  • 使用带有正则表达式的字典(Scala?)的 PySpark UDF 优化挑战

    我正在尝试优化下面的代码 PySpark UDF 它为我提供了所需的结果 基于我的数据集 但在非常大的数据集 大约 180M 上速度太慢 结果 准确度 优于可用的 Python 模块 例如 geotext hdx python countr
  • 如何使用ReportingService2010?

    我正在尝试使用报告服务器 Web 服务通过代码部署报告服务器解决方案 http 服务器名称 ReportServer ReportService2010 asmx wsdl http Server Name ReportServer Rep
  • 从 mongodb 数组中删除元素

    我是 mongodb 的新手 我想删除数组中的某些元素 我的文件如下 id ObjectId 4d525ab2924f0000000022ad name hello time stamp 2010 07 01T12 01 03 75 02
  • 覆盖 matplotlib 的平移工具 (wx)

    我正在使用 wxPython 面板中的 matplotlib 来执行一些繁重的绘图 我的问题是在使用本机平移工具时出现的 当您拖动平移手柄时 似乎 matplotlib 试图不断重绘画布 随着我绘制的数据量变得非常不稳定 已经使用数据集合等
  • 使用 AND 和 OR 运算符的 Solr 字段查询 (fq)

    我一直在努力使用 AND 和 OR 运算符形成 solr 字段查询 为什么 solr 对于 1 和 2 3 和 4 查询返回不同的结果 即使所有查询都有相同的逻辑 fq 名称 abc AND 城市 1 3 OR 名称 abc AND loc
  • 无法访问developer.apple.com 中的证书、标识符和配置文件

    我正在尝试遵循以下内容有效的配置文件均不包含设备 https stackoverflow com questions 28585821 none of the valid provisioning profiles include the
  • tkinter GUI 写入文本小部件并替换文本

    from tkinter import from tkinter import ttk parent Tk p ttk Panedwindow parent orient HORIZONTAL p pack fill BOTH expand
  • 无法访问已处置的对象。对象名称:FileBufferingReadStream

    我正在尝试在天蓝色中上传文件 所以基本上我正在尝试将文件转换为流 以便我可以在服务器上创建一个文件并写入其数据 public async Task UploadFileOnAzure string path string name IFor
  • 从外部文件调用 jQuery 日期选择器

    我对 jQuery 比较陌生 并且很难让 jQuery 日期选择器从外部 js 文件工作 最初 我将脚本创建为函数 但认为这样做会限制范围 并且无法在函数外部访问它 我还尝试将其定义为函数 并命名该函数 然后使用 document read
  • 允许用户在 iOS 应用程序内切换应用程序跟踪同意状态

    如何使用户能够从菜单中轻松切换同意inside具有新的应用程序跟踪透明度要求的实时 iOS 应用程序 我曾经通过复选标记按钮来跟踪用户同意情况 而无需 Apple 的 ATT 要求 我还可以使用此同意状态吗 我可以通过网络视图跟踪同意吗 T
  • 时差节目

    我正在使用以下函数来计算时差 它没有显示正确的输出 1 个月的时差后显示 2 分钟的差异 我的程序出了什么问题 public String TimestampDiff Timestamp t long t1 t getTime String