小编Dev*_*per的帖子

来自ZonedDateTime UTC实例的Java日期和时间戳

我有一个java应用程序,我想在UTC中的时间.目前,该代码使用的混合java.util.Datejava.sql.Timestamp.为了得到UTC的时间,我之前的程序员使用了:

对于日期:

 Date.from(ZonedDateTime.now(ZoneOffset.UTC)).toInstant();
Run Code Online (Sandbox Code Playgroud)

对于时间戳:

 Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
Run Code Online (Sandbox Code Playgroud)

但是我自己用这个代码运行了多个测试,这两行都返回当前日期/时间(在我当前的时区).从我读过的所有内容看来,Date/Timestamp没有zoneOffset值,但我找不到具体的声明.

无论如何要将timeZone(UTC)保留在Date或Timestamp对象中,还是需要进行一些重构并在整个应用程序中使用实际的ZonedDateTime对象?此ZonedDateTime对象也将与sql的当前Timestamp对象兼容吗?

例:

public static void main (String args[])
{
    ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
    Timestamp timestamp = Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
    Date date = Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
    System.out.println("ZonedDateTime: " + zonedDateTime);
    System.out.println("Timestamp: " + timestamp);
    System.out.println("Date: " + date);
}
Run Code Online (Sandbox Code Playgroud)

输出:

 ZonedDateTime: 2017-04-06T15:46:33.099Z
 Timestamp: 2017-04-06 10:46:33.109
 Date: Thu Apr 06 10:46:33 CDT 2017
Run Code Online (Sandbox Code Playgroud)

java sql timestamp date

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

IntelliJ 2017.1 更新导致 JAVA_TOOL_OPTIONS 打印

今天早上我更新到 IntelliJ IDEA 2017.1,当我运行任何测试时,甚至运行我制作的 hello_world 项目时,控制台会Picked up JAVA_TOOL_OPTIONS: -agentpath:"C:\windows\FireEye\JavaAgentDll_00.dll"在执行我的程序后打印一条消息。

此外,当我尝试在调试模式下运行时,我收到错误消息:

ERROR: JDWP unable to get necessary JVMTI capabilities.

如果我在 IntelliJ 之外运行程序,我不会收到这些错误。是否有解决错误的解决方案,是否有理由现在“选择”JAVA_TOOL_OPTIONS?

java intellij-idea

6
推荐指数
3
解决办法
6013
查看次数

Log4j2 模拟 Appender

我有一个课程,我在其中获取了所有属性,并在登录之前隐藏了它们的密码。

@Override
public void afterPropertiesSet() throws Exception {
    Properties loadedProperties = this.mergeProperties();
    loadedProperties.entrySet().stream().forEach(singleProperty -> {
        String key = singleProperty.getKey().toString();
        String value = HIDDEN_VALUE;

        if (!Arrays.stream(PASSWORD_PATTERNS).anyMatch(pattern -> key.toLowerCase().contains(pattern))) {
            value = singleProperty.getValue().toString();                  
        }

        logger.info("LoadedProperty: "+ key +"=" + value);
    });
}
Run Code Online (Sandbox Code Playgroud)

我已经迁移到 log4j2 并想测试这个类,检查 log4j2 的输出。它目前使用 log4j 并且有效,但是当我迁移到 log4j2 时,我得到

需要但未调用:mockAppender.append(); -> 在 com.comp.spmConf.ExceptionLoggerTest.verifyErrorMessages(ExceptionLoggerTest.java:87)

但是,还有其他与此模拟的交互:mockAppender.getName(); -> 在 org.apache.logging.log4j.core.config.AbstractConfiguration.addLoggerAppender(AbstractConfiguration.java:675)

mockAppender.getName(); -> 在 org.apache.logging.log4j.core.config.AppenderControl.(AppenderControl.java:51)

这是我的 log4j1 测试类:

import org.apache.log4j.Appender;
import org.apache.log4j.LogManager;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; …
Run Code Online (Sandbox Code Playgroud)

java junit log4j log4j2

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

ArrayList包含来自另一个ArrayList的一个或多个实体

我有两个ArrayLists(list1和list2).我想看看list2中是否有任何1个(或更多)对象(它们是字符串)出现在list1中.

所以,举个例子:

List<String> list1 = Arrays.asList("ABCD", "EFGH", "IJKL", "QWER");
List<String> list2 = Arrays.asList("ABCD", "1234");
//Should result in true, because "ABCD" is in list 1 & 2
Run Code Online (Sandbox Code Playgroud)

但是,方法containsAll()在这个用例中1234不起作用,因为在list1中不会发生,并且会导致结果为false,也包含()不起作用.

除了编写我自己的实现(比较从list2到list1的所有值)之外,是否有类似于contains()的方法,其中可以传入字符串列表,并将其与另一个列表进行比较,如果有的话,返回true或更多值包含在该列表中?

更多例子:

ArrayList list1 = {1, 2, 3, 4, 5}

ArrayList list2 = {1, 2, 3} --> True
ArrayList list2 = {3, 2, 1} --> True
ArrayList list2 = {5, 6, 7, 8, 9} --> True
ArrayList list2 = {6, 7, 8, 9} --> False
Run Code Online (Sandbox Code Playgroud)

java arrays java-8

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

指定传递到 Mockito doReturn 方法中的方法的特定枚举

我有一个 junit 测试,其中我在类中模拟了一个对象。Mocker让我们用 MyManager 的 @Mock 来调用该类mocker

示例类:

public class Mocker {
   private MyManager myManager;

   public void myMethod() {
       String x = "test";
       final String result1 =  this.myManager.execute(dummyEnum.ENUM_A, x);
       final String result2 =  this.myManager.execute(dummyEnum.ENUM_B, x);

       if(result1 == true) {
           //Do something
       }
       if(result2 == true) {
           //Do something else
       }
   }

   public enum dummyEnum {
        ENUM_A,ENUM_B
   }
}
Run Code Online (Sandbox Code Playgroud)

我当前的 junit 测试使用以下内容:doReturn(null).when(mocker).execute(any(dummyEnum.class), anyObject());

但是,这将为 result1 和 result2 返回 null。我如何指定当使用ENUM_A执行execute()时,它返回一个字符串,Hello而使用ENUM_B执行execute()则返回一个字符串Goodbye

我已经在这里看到了答案,但我不想只说该类的任何实例,我想指定该类中的某个枚举。

java junit mockito

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

将Enum值转换为逗号分隔String的最有效方法

我有一个java类,我在其中存储一个枚举.(显示在这个问题的底部)在这个枚举中,我有一个名为toCommaSeperatedString()的方法,它返回一个逗号分隔的枚举值String.我在这里阅读了一些关于性能的信息后,我正在使用StringBuilder .

我将这个枚举值转换为commaSeperatedString的方式是这样做的最有效方式,如果是这样,那么在String的最后一个字符处删除额外逗号的最有效方法是什么?

例如,我的方法返回,123, 456,但我更喜欢123, 456.如果我想返回,PROPERTY1, PROPERTY2我可以很容易地使用Apache Commons库StringUtils.join(),但是,getValue当我迭代String数组时,我需要通过调用方法来降低一级.

public class TypeEnum {
    public enum validTypes {
        PROPERTY1("123"),
        PROPERTY2("456");

        private String value;

        validTypes(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public static boolean contains(String type) {
            for (validTypes msgType : validTypes.values()) {
                if (msgType.value.equals(type)) {
                    return true;
                }
            }
            return false;
        }

        public static String toCommaSeperatedString() {
            StringBuilder commaSeperatedValidMsgTypes = new StringBuilder();
            for(validTypes …
Run Code Online (Sandbox Code Playgroud)

java string enums

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

标签 统计

java ×6

junit ×2

arrays ×1

date ×1

enums ×1

intellij-idea ×1

java-8 ×1

log4j ×1

log4j2 ×1

mockito ×1

sql ×1

string ×1

timestamp ×1