小编Ell*_*sch的帖子

哪个对象最适合做时间操作

我的任务是编写一个记录飞行数据的程序,所以我决定制作一个飞行物体.

在此对象内是出发时间和到达时间.我不确定哪个对象最适合用于此,我希望将时间存储在24小时(hh:mm)时间内,并能够以小时和分钟计算飞行持续时间(hh:mm) ,我看过文档,我遇到了3个不同的时间对象.

1 java.util.Date

  • 没用,因为它包含太多的信息,如年份和月份,这是制作图表的一个非常基本的程序,而且大多数数据操作都使用longs.

2 java.sql.Date

  • 不包含以我想要的相同比例处理时间的构造函数,并使用longs进行操作.

3 java.sql.Time

  • 似乎有正确的构造函数,它是"已弃用".而且我确定我在某个地方读到它意味着在以后的版本中不再支持它并且使用它们是不好的做法.这又让我失去了Time(long)构造函数.对我来说不是很有用,因为这意味着我需要在创造时间之前将每次转换为多头.

TL;博士:

是否有任何库可以创建一个看起来像这样的时间

(pseudocode):
Object time = new Constructor(23,11) 
Run Code Online (Sandbox Code Playgroud)

这不是"弃用"所以我不必先转换为long.或者,我必须自己制作Object

java datetime

2
推荐指数
2
解决办法
147
查看次数

System.nanoTime()返回java 7和java 8之间的不同值

System.nanoTime() 当编译相同的代码并针对java 7和java 8运行时,返回不同的值.

这段代码:

public class nanoTime
{
    public static void main(String... args)
    {
      System.out.println("Found JVM: "
          + " " + System.getProperty("java.vm.vendor")
          + " " + System.getProperty("java.version")
          + " " + System.getProperty("java.vm.name")
          );
      System.out.println("time is "+ System.nanoTime());
    }
}
Run Code Online (Sandbox Code Playgroud)

在java 7上打印出来

~ gdate +%s%N && javac7-oraclejdk nanoTime.java && java7-oraclejdk nanoTime
1480143769271605000
Found JVM:  Oracle Corporation 1.7.0_80 Java HotSpot(TM) 64-Bit Server VM
time is 1480143769807547000
Run Code Online (Sandbox Code Playgroud)

这在java 8上

~ gdate +%s%N && javac nanoTime.java && java nanoTime
1480143724152650000
Found JVM:  Oracle …
Run Code Online (Sandbox Code Playgroud)

java nanotime

2
推荐指数
1
解决办法
564
查看次数

添加功能的尴尬实现

我很难理解为什么这样:

addItem = item => {
    this.setState({ grudges: [grudge, ...this.state.grudges] });
}
Run Code Online (Sandbox Code Playgroud)

相当尴尬的实施存在.岂不

this.state.grudges.push(grudge)
Run Code Online (Sandbox Code Playgroud)

满足?

javascript ecmascript-6 reactjs

2
推荐指数
1
解决办法
56
查看次数

将2位数字设为3位数字并反转

99099和反向它=990

这是我的代码,但它没有改变number.为什么?

int number = 99;
String strI = String.format("%03d", number);
new StringBuilder(strI).reverse().toString();
number = Integer.parseInt(strI);
return number;
Run Code Online (Sandbox Code Playgroud)

java reverse

1
推荐指数
1
解决办法
2426
查看次数

使用迭代优化HashMap

我有一个ResultSet包含300K记录,我正在执行以下操作来迭代它(以及其他操作一旦收集).此过程大约需要2分钟才能完成.有没有办法优化它?

Map<String,Map<String,String>> internalMap  = new HashMap<String,Map<String,String>>(); 

while (resultSet.next()) {
    final Integer val1 = resultSet.getInt("val1");
    final String val2 = resultSet.getString("val2");
    final String val3 = resultSet.getString("val3");
    final String val4 = resultSet.getString("val4");
    final String type = resultSet.getString("type");
    final String id = resultSet.getString("id");

    addIntern(internalMap,val2,val1,val3,val4,type,id);
}
Run Code Online (Sandbox Code Playgroud)

以及addIntern上面引用的方法

private static void addIntern(Map<String,Map<String,String>> internalMap, String val2, Integer val1,
    String val3,String val4,String type,String id) {
    String key = id+"##"+val4;
    if (internalMap.get(key) == null) {
        internalMap.put(key, new HashMap<String,String>());
    }
    internalMap.get(key).put("val3", val3);
    internalMap.get(key).put("val2", val2);


    if("create".equals(type)){
        internalMap.get(key).put("create", …
Run Code Online (Sandbox Code Playgroud)

java collections jdbc hashmap

1
推荐指数
1
解决办法
56
查看次数

N的最大除数(自身除外)

我正在尝试将列表分成尽可能大的子列表。如果列表不能以这种方式划分,我将根据需要进行处理,但是我需要获得除N本身以外的最大数目,该数目将N均分。

我写了一个非常幼稚的解决方案,但是我觉得应该有一个公式或某种东西可以在恒定时间内做到这一点。我的列表不是很大,最大大小为1000。这可能不是关键路径,但是有更好的算法吗?

public static int largestDivisor(int n){
   int divisor = 0;
   for (int i = 1; i <= n/2; i++)
       if (n % i == 0) 
           divisor = i;

   return divisor; 
}
Run Code Online (Sandbox Code Playgroud)

java int division modulus

1
推荐指数
1
解决办法
1730
查看次数

使用JDK8以单行修改列表数据

在Java中我们可以修改List如下

for (Customer cust : customers) {
    cust.setAge(15);
    cust.setName("Customer1");
    cust.setAddress("Address1");
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,可以用一个循环修改多个属性.

在JDK8中,可以用以下内容更新列表数据forEach:

customers.forEach(cust -> cust.setAge(15));
Run Code Online (Sandbox Code Playgroud)

但是我想用java 8修改多个属性.怎么做呢?

java foreach java-8

1
推荐指数
1
解决办法
48
查看次数

为什么我的整数增加2而不是1?java的

我已经实现了类似于简单时钟的代码,每次在我的课程中它应该增加1.到目前为止,这是我在主程序中的内容:

public static void main(String[] args) {
    BoundedCounter counter = new BoundedCounter(60);
    System.out.println("Value at start: " + counter);
    int i = 0;
    while (i < 10) {
        counter.next();
        System.out.println("Value: " + counter);
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是"BoundedCounter"类:

class BoundedCounter {

    private int value;
    private int upperBound;

    public BoundedCounter(int upperBound) {
        this.upperBound = upperBound;
        this.value = 0;  
    }

    public void next () {
        if (value++ > upperBound) { 
            value = 0;
        } else {
            value++;
        }
    }

    public String toString() {
        return …
Run Code Online (Sandbox Code Playgroud)

java int increment while-loop

1
推荐指数
1
解决办法
160
查看次数

为什么当日期实际上更早时,Java的Date.after()会返回'true'?

我有一个程序,我将两个日期相互比较; 即使date1以前date2,也date1.after(date2)回来了true.时区没有效果; 这两个日期都是UTC.

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Test {
    public static void main(String[] args) throws Exception {
        TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date date1 = dateFormat.parse("2018-07-27 01:22:14.077");
        Date date2 = new Timestamp(1532654534390l);
        System.out.println(dateFormat.format(date1));
        System.out.println(dateFormat.format(date2));
        System.out.println(date1.getTime() > date2.getTime());
        System.out.println(date1.after(date2));
    }
}
Run Code Online (Sandbox Code Playgroud)

这输出:

2018-07-27 01:22:14.077
2018-07-27 01:22:14.390
false
true

这里发生了什么?


在我的真实程序中,date1从日志文件中解析date2并由Hibernate从数据库中检索,这会导致不同的数据类型.即使我找到了根本原因并知道如何避免这个问题,我仍然对防止这个陷阱的解决方案非常感兴趣.

java datetime date jdbc language-lawyer

1
推荐指数
2
解决办法
140
查看次数

当条件为真时,我的循环不会结束

我的程序提示用户输入项目的代码.不允许重复代码,因此当他输入代码时,for循环将检查它是否存在.该for循环应该break为我的病情,因为我得到的输出"项目的代码存在",但它仍然无法将项目添加到阵列中.我错过了什么?

tems[] items = new Items[200];
AddItem add = new AddItem();
Scanner s = new Scanner(System.in);
int z,x;
double c,v;
String n,m,b;
public void addItem(){
    int r;
    z = add.getCode();
    x = add.getQuantity();
    c = add.getCostPrice();
    n = add.getDescription();
    m = add.getDiscount();
    v = add.getSellingPrice();
    b = add.getStatus();

    for(r = 0; r < items.length; r++){
        for(int q=0; q<r; q++){
            if(z==items[q].getCode()){
                System.out.println("Item's code exists");
                break;
            }
        }
        if(items[r]==null){
            items[r] = new Items(z, n, x, c, …
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
96
查看次数