我有一个java应用程序,我想在UTC中的时间.目前,该代码使用的混合java.util.Date和java.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) 今天早上我更新到 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?
我有一个课程,我在其中获取了所有属性,并在登录之前隐藏了它们的密码。
@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) 我有两个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) 我有一个 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类,我在其中存储一个枚举.(显示在这个问题的底部)在这个枚举中,我有一个名为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)