相关疑难解决方法(0)

时区缩写

TimeZoneInfo不为给定时区提供缩写或短名称.这样做的唯一的好办法是有一个字典,地图缩写来要么Timezone.id,StandardNameDaylightName性质.但是,我搜索缩写列表的所有源都有不同的时区名称,即与Windows中的不同.

如何在.NET中向用户显示不是全名,id或任何其他名称?我不想要UtcOffset而是Timezone缩写 - 太平洋的PST,UTC - 适用于Universal,EST - 适用于东部标准等.是否有任何C#兼容列表或数据库包含所有可能的时区及其缩写,与TimeZoneInfo.GetSystemTimeZones()您提供的那些兼容?

.net c# timezone

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

Java 8 Time API - ZonedDateTime - 在解析时指定默认的ZoneId

我正在尝试编写一个泛型方法来返回ZonedDateTime给定的日期String及其格式.

如果未在日期中指定,我们如何ZonedDateTime使用默认值?ZoneIdString

它可以用java.util.Calendar,但我想使用Java 8时间API.

这里的问题是使用固定的时区.我将格式指定为参数.日期及其格式都是String参数.更通用.

代码和输出如下:

public class DateUtil {
    /** Convert a given String to ZonedDateTime. Use default Zone in string does not have zone.  */
    public ZonedDateTime parseToZonedDateTime(String date, String dateFormat) {
        //use java.time from java 8
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(date, formatter);
        return zonedDateTime;
    }

    public static void main(String args[]) {
        DateUtil dateUtil = new DateUtil();
        System.out.println(dateUtil.parseToZonedDateTime("2017-09-14 15:00:00+0530", "yyyy-MM-dd HH:mm:ssZ"));
        System.out.println(dateUtil.parseToZonedDateTime("2017-09-14 …
Run Code Online (Sandbox Code Playgroud)

java timezone datetime-parsing java-time zoneddatetime

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

Java没有关于所有IANA时区的信息

我正在尝试将来自前端的值映射到ZoneId类,如下所示:

Optional.ofNullable(timeZone).map(ZoneId::of).orElse(null)
Run Code Online (Sandbox Code Playgroud)

对于大多数时区,它工作正常,但是,对于某些值,Java抛出异常:

java.time.zone.ZoneRulesException: Unknown time-zone ID: America/Punta_Arenas
Run Code Online (Sandbox Code Playgroud)

但是,根据IANA,它是一个有效的时区:https: //www.iana.org/time-zones

Zone America/Punta_Arenas -4:43:40 - LMT 1890

我在考虑为这些时区使用偏移量(只是硬编码值),但我想应该有更方便的方法来解决这个问题.有没有办法可以处理Java?

其他不受支持的时区:

  • 美国/ Punta_Arenas
  • 亚洲/阿特劳
  • 亚洲/法马古斯塔
  • 亚洲/仰光
  • 美东时间
  • 欧洲/萨拉托夫
  • HST
  • MST

我的Java版本:"1.8.0_121"Java(TM)SE运行时环境(版本1.8.0_121-b13)Java HotSpot(TM)64位服务器VM(版本25.121-b13,混合模式)

java timezone timezone-offset java-time

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

java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME无法解析时区名称

我正在尝试从定义为使用RFC1123兼容日期时间规范的数据源解析时间戳.我的代码是:

value = Instant.from (DateTimeFormatter.RFC_1123_DATE_TIME.parse (textValue));
Run Code Online (Sandbox Code Playgroud)

这适用于某些数据,但我得到包含区域名称的字符串的例外,甚至是RFC2822中定义的字符串(由于它废弃RFC822而间接引用RFC1123).例子:

java.time.format.DateTimeParseException: Text 'Sun, 20 Aug 2017 00:30:00 UT' could not be parsed at index 26
java.time.format.DateTimeParseException: Text 'Mon, 21 Aug 2017 15:00:00 EST' could not be parsed at index 26
Run Code Online (Sandbox Code Playgroud)

我如何说服DateTimeFormatter接受这种类型的约会?

java parsing date datetime-parsing java-time

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

将java.util.Date截断为LocalDate,而不必将inTunst()截断,因为java.sql.Date提供了UnsupportedOperationException

如果我用java.util.DatetoInstant()上这恰好是一个变量java.sql.Date,我得到一个UnsupportedOperationException

try {
    java.util.Date input = new java.sql.Date(System.currentTimeMillis());
    LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
} catch (UnsupportedOperationException e) {
    // grrr!
}
Run Code Online (Sandbox Code Playgroud)

java.util.Date,我很担心经由传统API的MySQL数据库来自一个日期字段,而实际上是一个java.sql.Date

现在,以下相关问题都很有趣:

UnsupportedOperationException-为什么不能在java.sql.Date上调用toInstant()?

将java.util.Date转换为java.time.LocalDate

LocalDate到java.util.Date的转换,反之亦然?

但它们没有提供任何截断a的优雅方法java.util.Date来摆脱时间成分并获得Java 8 LocalDate

我承认存在一个问题,一个时区中的同一时刻可能与另一时区中的同一时刻的日期不同。

我怀疑解决方案将涉及java.util.Calendar,但与其设计我自己的解决方案,不如先确定其他人已经做的事情。

我希望找到比这短的东西:

在Java中重置时间戳的时间部分开始

Date date = new Date();                      // timestamp now
Calendar cal = Calendar.getInstance();       // get calendar instance
cal.setTime(date);                           // set cal to date
cal.set(Calendar.HOUR_OF_DAY, 0);            // set hour to midnight
cal.set(Calendar.MINUTE, 0); …
Run Code Online (Sandbox Code Playgroud)

java datetime date date-conversion java-time

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

MST 被映射到 joda 中的丹佛时区,当前是 MDT。这是 joda DateTimeZone 中的错误吗?

我需要转换GMT为亚利桑那州时间。亚利桑那州目前已MST关闭夏令时。

然而在 Joda TimeDateTimeZone代码中,MST已映射到America/Denver

map.put("MST", "America/Denver");
Run Code Online (Sandbox Code Playgroud)

可以看出,目前丹佛实行夏令时,因此有MDTDateTimeZone那么为什么要在代码中进行这样的映射呢?

在从 转换为亚利桑那州本地时区时GMT,我得到了偏移量,因为GMT-6这是错误的,而且应该是这样GMT-7,因为MST没有夏令时。

这是一个错误吗?如何解决问题?

java jodatime timezone-offset

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

比较不同时区的两个日期对象并获取精确的时间差(以秒为单位)

我正在尝试将电子邮件(日期对象)的接收日期与 JSONObject 中的日期(字符串)进行比较。这两个日期将属于不同时区,相差 1 小时。

我的情况是,我必须在几秒钟内获得它们之间的确切差异,如果差异为 +/- 10 秒,我就会找到匹配项。为此,我决定将两者都转换为“UTC”,然后进行区别。这是我的代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

String MsgDtStr = sdf.format(messagesToBeProcessed.getReceivedDate()); 

Date MsgDt = sdf.parse(MsgDtStr);

Date ObjDt = sdf.parse((JsonObj.get("date").toString()));

int DiffInSecs = (int) (ObjDt.getTime() - MsgDt.getTime()) / 1000 % 60;

if (DiffInSecs >= -10 && DiffInSecs <= 10) {
                System.out.println("Found a match!");
                MatchedList.add(i);
}
Run Code Online (Sandbox Code Playgroud)

这似乎给了我正确的结果。应该与 json 对象匹配的邮件匹配。即差异为 +/- 10 秒。但是,当我尝试打印日期并DiffInSecs在上述逻辑之后,我得到如下值:

date in object: 2017-06-22 19:47:25
date in message: 2017-06-22 23:47:30
DiffInSecs: -5

        ........

date in object: 2017-06-22 17:50:38
date …
Run Code Online (Sandbox Code Playgroud)

java timezone date date-difference

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

以秒为单位获取当前时间

有没有办法以秒为单位获取当天的当前时间?请注意,我问的是一天中的时间,而不是 UTC 时间。

我想要的是介于0 - 86,400 (12:00AM - 11:59PM)之间的值(以秒为单位)。我正在开发一个每天运行的应用程序,当一天结束时,时间(以秒为单位)应该重新开始0

所以让我们说它是10:00AM。我应该得到36,000秒,如果我的时间是5:00PM,我应该得到61,200秒。

PS:我不知道手头的时间。该程序将使用currentTime()函数自行计算。

java java-time

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

DateTimeFormatter 不解析自定义日期格式

我有一个关于 java 的问题DataTimeFormmater。我觉得我错过了一些东西,但又不知道到底错过了什么。

String format = "yyyy-MM-dd'T'HH:mm:ss[.S]'T'zxxx";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);

String date = "2017-07-05T12:28:36.4TGMT+03:00";

System.out.println(formatter.format(ZonedDateTime.now()));
System.out.println(formatter.parse(date));
Run Code Online (Sandbox Code Playgroud)

上面的代码生成当前的字符串ZonedDateTime,并尝试使用相同的日期格式化程序解析日期时间字符串。2017-07-05T06:07:51.0TCDT-05:00成功生成但无法解析的结果2017-07-05T12:28:36.4TGMT+03:00

我的目标是解析2017-07-05T12:28:36.4TGMT+03:00并提出适当的DateTimeFormatter.

java datetime datetime-parsing java-time

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

SimpleDateFormat.parse() 忽略时区?

我正在尝试使用此代码来解析带有时区的日期字符串进行测试:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZZZZZ", Locale.US);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse("2017-07-26T06:00-06:00"));
int offset = calendar.getTimeZone().getRawOffset();
Run Code Online (Sandbox Code Playgroud)

我正在尝试将时区从 更改-06+09,但offset始终包含10800000.

如何正确解析带有时区的日期(我需要时间和时区)?

android simpledateformat datetime-parsing timezone-offset

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