TimeZoneInfo不为给定时区提供缩写或短名称.这样做的唯一的好办法是有一个字典,地图缩写来要么Timezone.id,StandardName或DaylightName性质.但是,我搜索缩写列表的所有源都有不同的时区名称,即与Windows中的不同.
如何在.NET中向用户显示不是全名,id或任何其他名称?我不想要UtcOffset而是Timezone缩写 - 太平洋的PST,UTC - 适用于Universal,EST - 适用于东部标准等.是否有任何C#兼容列表或数据库包含所有可能的时区及其缩写,与TimeZoneInfo.GetSystemTimeZones()您提供的那些兼容?
我正在尝试编写一个泛型方法来返回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) 我正在尝试将来自前端的值映射到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?
其他不受支持的时区:
我的Java版本:"1.8.0_121"Java(TM)SE运行时环境(版本1.8.0_121-b13)Java HotSpot(TM)64位服务器VM(版本25.121-b13,混合模式)
我正在尝试从定义为使用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.util.Date的toInstant()上这恰好是一个变量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,但与其设计我自己的解决方案,不如先确定其他人已经做的事情。
我希望找到比这短的东西:
Run Code Online (Sandbox Code Playgroud)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); …
我需要转换GMT为亚利桑那州时间。亚利桑那州目前已MST关闭夏令时。
然而在 Joda TimeDateTimeZone代码中,MST已映射到America/Denver:
map.put("MST", "America/Denver");
Run Code Online (Sandbox Code Playgroud)
可以看出,目前丹佛实行夏令时,因此有MDT。DateTimeZone那么为什么要在代码中进行这样的映射呢?
在从 转换为亚利桑那州本地时区时GMT,我得到了偏移量,因为GMT-6这是错误的,而且应该是这样GMT-7,因为MST没有夏令时。
这是一个错误吗?如何解决问题?
我正在尝试将电子邮件(日期对象)的接收日期与 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) 有没有办法以秒为单位获取当天的当前时间?请注意,我问的是一天中的时间,而不是 UTC 时间。
我想要的是介于0 - 86,400 (12:00AM - 11:59PM)之间的值(以秒为单位)。我正在开发一个每天运行的应用程序,当一天结束时,时间(以秒为单位)应该重新开始0。
所以让我们说它是10:00AM。我应该得到36,000秒,如果我的时间是5:00PM,我应该得到61,200秒。
PS:我不知道手头的时间。该程序将使用currentTime()函数自行计算。
我有一个关于 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.
我正在尝试使用此代码来解析带有时区的日期字符串进行测试:
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.
如何正确解析带有时区的日期(我需要时间和时区)?