我试图将a格式化Date为String使用SimpleDateFormat,而im使用的模式就是这个
"YYYY-MM-dd'T'HH:MM:ss.SSSxxx"
但到达这条线时
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
java.lang.IllegalArgumentException:在java.text.SimpleDateFormat的java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:312)的java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:323)中的未知模式字符'x'. SimpleDateFormat.java:365)at java.text.SimpleDateFormat.(SimpleDateFormat.java:258)
我试图实现的格式是" 2017-06-16T12:19:59.001 + 02:00 "
根据文档这个模式应该工作什么错了?
编辑 为了澄清,我尝试了xxx和XXX
在XXX的情况下我得到java.lang.IllegalArgumentException:未知的模式字符'X'
在Joda中,我们可以计算2个Datetime之间的年份
Years.between(dateTime1, dateTime2);
Run Code Online (Sandbox Code Playgroud)
是否有任何简单的方法可以在2个时刻之间找到使用java.timeAPI而没有太多逻辑的年份?
ChronoUnit.YEARS.between(instant1, instant2)
Run Code Online (Sandbox Code Playgroud)
失败:
Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
at java.time.Instant.until(Instant.java:1157)
at java.time.temporal.ChronoUnit.between(ChronoUnit.java:272)
...
Run Code Online (Sandbox Code Playgroud) 我只是不太了解在以下示例中应该使用这两个中的哪一个:
我们有OfferEntity一个成员availableDay,该成员是要约可用的日期。
现在,该表将如下所示:
CREATE TABLE IF NOT EXISTS offer (
created timestamp with time zone NOT NULL DEFAULT NOW(),
id BIGSERIAL PRIMARY KEY,
available timestamp with time zone
);
Run Code Online (Sandbox Code Playgroud)
从PostgreSQL文档中我们知道:
对于
timestamp with time zone,内部存储的值始终以UTC(通用协调时间,通常称为格林威治标准时间,GMT)表示。使用该时区的适当偏移量,将指定了明确时区的输入值转换为UTC。如果在输入字符串中未指定时区,则假定该时区位于系统TimeZone参数指示的时区中,并使用时区的偏移量将其转换为UTC。
这意味着在保留任何日期/时间信息时我应该没问题。
但这对我OfferEntity和我定义的REST端点意味着什么OfferController?
@Entity
@Table(name = "offer")
public class OfferEntity {
@Column(name = "available", nullable = false)
private ZonedDateTime availableDay;
}
Run Code Online (Sandbox Code Playgroud)
与
@Entity
@Table(name = "offer")
public class OfferEntity {
@Column(name = "available", …Run Code Online (Sandbox Code Playgroud) postgresql utc timestamp-with-timezone zoneddatetime java.time.instant
我正在尝试将LocalDate变量格式化为dd.MMM.YYYY:
DateTimeFormatter.ofPattern("dd.MMM.yyyy")
Run Code Online (Sandbox Code Playgroud)
问题是,超过一半的时间我得到两个点。例如01-01-2000转到01.Jan..2000.
我知道为什么我会遇到这个问题,因为这三个Ms。当我使用时dd.MM.yyyy,我没有01.01.2000问题。第三M是问题。
我怎样才能解决这个问题?
我收到以下错误:
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) [jboss-jsf-api_2.1_spec-2.1.28.SP1-redhat-1.jar:2.1.28.SP1-redhat-1]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101) [jsf-impl-2.1.28.redhat-10.jar:2.1.28.redhat-10]
at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.1.28.SP1-redhat-1.jar:2.1.28.SP1-redhat-1]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786) [jboss-jsf-api_2.1_spec-2.1.28.SP1-redhat-1.jar:2.1.28.SP1-redhat-1]
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251) [jboss-jsf-api_2.1_spec-2.1.28.SP1-redhat-1.jar:2.1.28.SP1-redhat-1]
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.28.redhat-10.jar:2.1.28.redhat-10]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.28.redhat-10.jar:2.1.28.redhat-10]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.28.redhat-10.jar:2.1.28.redhat-10]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.1.28.SP1-redhat-1.jar:2.1.28.SP1-redhat-1]
... 29 more
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899) [rt.jar:1.8.0_65]
at java.util.TimSort.mergeAt(TimSort.java:516) [rt.jar:1.8.0_65]
at java.util.TimSort.mergeForceCollapse(TimSort.java:457) [rt.jar:1.8.0_65]
at java.util.TimSort.sort(TimSort.java:254) [rt.jar:1.8.0_65]
at java.util.Arrays.sort(Arrays.java:1512) [rt.jar:1.8.0_65]
at java.util.ArrayList.sort(ArrayList.java:1454) [rt.jar:1.8.0_65]
at java.util.Collections.sort(Collections.java:175) [rt.jar:1.8.0_65]
Run Code Online (Sandbox Code Playgroud)
下面是我的比较方法代码.vo1.getAttribute()返回java.util.DateObject.
@Override
public int compare(DateComparableVO …Run Code Online (Sandbox Code Playgroud) 当我尝试从MySQL检索时间并将其设置为a时JLabel,它会给我一个错误.
java.sql.SQLException:java.sql.Time的非法小时值'50',值为'50:51:05.
任何人都可以建议我如何解决这个问题?
代码如下.
String sql = "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(ot)))"
+ " FROM attendance"
+ " WHERE department = '"+department+"'"
+ " AND date BETWEEN '"+dateChooser1+"' AND '"+dateChooser2+"'";
st = con.createStatement();
rst = st.executeQuery(sql);
if(rst.next())
{
String time = rst.getString(1);
oTimeTemp.setText(time);
}
Run Code Online (Sandbox Code Playgroud) 我们需要将Google Proto缓冲时间戳转换为正常日期。在这种情况下,是否可以将Google Proto缓冲区时间戳LocalDate直接转换为Java ?
自从我将 android studio 升级到3.5. 我在谷歌上找不到任何结果来解决这个问题。我需要帮助。谢谢。
我打开了一个新项目,只添加了下面的 build.gradle 并且错误仍然出现。
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'
apply plugin: 'im.getsocial'
getsocial {
appId "11111111"
}
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.app.ej"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0' …Run Code Online (Sandbox Code Playgroud) 我有一台Linux机器,其时区设置为Asia / Qatar。当我使用格式化程序打印Instant.EPOCH时,它给我错误的区域信息,而对于Instant.now(),区域信息是正确的。下面是我的代码及其输出。谁能帮我,为什么会有这个差异?
import java.util.Date;
import java.time.format.DateTimeFormatter;
import java.time.Instant;
import java.time.ZoneId;
public class DateTest {
public static void main(String[] args) {
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS Z";
Instant myInstant = Instant.EPOCH;
Instant myInstantNow = Instant.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern).withZone(ZoneId.systemDefault());
System.out.println(formatter.format(myInstant));
System.out.println(formatter.format(myInstantNow));
}
}
Run Code Online (Sandbox Code Playgroud)
代码的输出为:
1970-01-01T04:00:00.000 +0400
2019-09-29T18:30:14.766 +0300
Run Code Online (Sandbox Code Playgroud)
Java版本:“ 1.8.0_181”
如果我在Windows中运行相同的代码,它的工作正常。我的Instant.EPOCH也得到+0300。
我试图理解为什么 Jackson 在 Spring 集成测试中获取 MvcResult 时将 ZonedDateTime 转换为 Decimal ?
这是预计日期:2019-10-01T10:10:44+02:00[欧洲/巴黎] 实际结果:1572426644.000000000