我不想使用该pytz库,因为我正在处理的项目需要文书工作来引入依赖项。如果我可以在没有第三方库的情况下实现这一点,我会更开心。
当日期处于夏令时时,我无法在 CET 和 UTC 之间转换日期。这与我期望的不同一个小时:
>>> print from_cet_to_utc(year=2017, month=7, day=24, hour=10, minute=30)
2017-07-24T09:30Z
2017-07-24T08:30Z # expected
Run Code Online (Sandbox Code Playgroud)
CET 比 UTC 早 1 小时,夏季比 UTC 早 2 小时。因此,我预计仲夏的中欧 10:30 实际上是 UTC 时间 8:30。
功能是:
from datetime import datetime, tzinfo, timedelta
def from_cet_to_utc(year, month, day, hour, minute):
cet = datetime(year, month, day, hour, minute, tzinfo=CET())
utc = cet.astimezone(tz=UTC())
return '{:%Y-%m-%d:T%H:%MZ}'.format(utc)
Run Code Online (Sandbox Code Playgroud)
我使用两个时区信息对象:
class CET(tzinfo):
def utcoffset(self, dt):
return timedelta(hours=1)
def dst(self, dt):
return timedelta(hours=2)
class UTC(tzinfo):
def utcoffset(self, dt):
return timedelta(0) …Run Code Online (Sandbox Code Playgroud) 我正在为Android制作日记应用程序,我想让用户选择他们所在的时区.时间一直是我编程的混乱区域.
我将为可用的时区创建一个枚举.
我将以longUTC格式将日期/时间条目保存到sqlite ,然后以Java编程方式处理偏移量和DST以用于显示目的.
我实际上意识到Java在日期/时间处理方面的局限性.
Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("UTC")); //returns the current time in UTC format
Long utcLong = utc.getTimeInMillis(); //returns current utc time in long for database insertion
Run Code Online (Sandbox Code Playgroud)
问题1:我如何应用偏移量并说明何时应用任何额外的DST偏移量?因为并非所有时区都观察到DST,并且DST在不同时区对不同时区生效.
问题2:Java的TimeZone类有大约800个ID,用户必须滚动~800个选项才能找到适用于它们的选项.有短名单吗?我在想大约有50个有用的时区.
我对 Java 和一般编码非常陌生 - 我有一些代码以以下格式返回时间戳,如下yyyy.MM.dd HH:mm:ss:ms所示:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:sss");
Run Code Online (Sandbox Code Playgroud)
这将返回:
2017.07.19 11:42:30:423
Run Code Online (Sandbox Code Playgroud)
有没有办法编辑上面的“SimpleDateFormat 格式化程序”代码以将日期/时间作为包含毫秒的纪元时间戳返回,以便返回的值按照以下格式进行格式化?
1500464550423
Run Code Online (Sandbox Code Playgroud)
我希望我可以修改代码的("yyyy.MM.dd HH:mm:ss:sss")一部分SimpleDateFormat formatter来做到这一点。
非常感谢任何帮助或建议。
谢谢
我是Java的新手.我有时间从网页上获取,这是"hh:mm"格式(不是24小时).这对我来说是一个字符串.然后我想将这个字符串与今天的日期结合起来,以便创建一个Date我可以使用的Java .
在C#中:
string s = "5:45 PM";
DateTime d;
DateTime.TryParse(s, out d);
Run Code Online (Sandbox Code Playgroud)
在Java中我尝试过:
String s = "5:45 PM";
Date d = new Date(); // Which instantiates with the current date/time.
String[] arr = s.split(" ");
boolean isPm = arr[1].compareToIgnoreCase("PM") == 0;
arr = arr[0].split(":");
int hours = Integer.parseInt(arr[0]);
d.setHours(isPm ? hours + 12 : hours);
d.setMinutes(Integer.parseInt(arr[1]));
d.setSeconds(0);
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现我想要的?
我的格式有时间戳2017-18-08 11:45:30.345.
我想将它转换为纪元时间,所以我在下面做:
String timeDateStr = "2017-18-08 11:45:30.345";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-dd-MM HH:mm:ss.SSS");
ZonedDateTime zdt = ZonedDateTime.parse(timeDateStr, dtf);
System.out.println(zdt.toInstant().toEpochMilli());
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
java.time.format.DateTimeParseException:无法解析文本'2017-18-08 11:45:30.345':无法从TemporalAccessor获取ZonedDateTime
我也尝试过不同的格式,但仍然会出错.
使用'old',Java 8之前SimpleDateFormat我可以做到:
new java.text.SimpleDateFormat("MMM yyyy", new java.util.Locale("es", "ES")).parse("Mayo 2017")
Run Code Online (Sandbox Code Playgroud)
获取Date具有西班牙月份名称的日期对象.
如何使用Java 8实现相同的功能DateTimeFormatter?
我试过了:
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withLocale(new Locale("es", "ES")).ofPattern("MMM yyyy").parse("Mayo 2017")
Run Code Online (Sandbox Code Playgroud)
但只得到一个java.time.format.DateTimeParseException.
我正在寻找一种方法来比较LocalDate和ZonedDateTimein的实例js-joda,但这些类不兼容。我愿意接受,这LocalDate是ZonedDateTime时间和时区设置为零的情况。
比较这两个对象的最简单方法是什么?
javascript datetime-comparison zoneddatetime js-joda localdate
我该如何解析PDT时区中的日期时间值?
06/24/2017 07:00 AM (PDT)
Run Code Online (Sandbox Code Playgroud)
我想维护时区,以便我可以根据网站访问者的偏好来表示其他时区的时间.
我尝试使用,ZonedDateTime但我得到一个解析错误:
java.time.ZonedDateTime.parse("06/24/2017 07:00 AM (PDT)")
Run Code Online (Sandbox Code Playgroud)
错误是:
java.time.format.DateTimeParseException: Text '06/24/2017 07:00 AM (PDT)' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:582) ... 29 elided
Run Code Online (Sandbox Code Playgroud)
另外,你是否同意我应该使用ZonedDateTime?
鉴于两者java.time.Clock.systemDefaultZone().getZone()都java.util.TimeZone.getDefault().toZoneId()返回相同的输出,两者之间有什么区别吗?
例如这段代码
import java.time.Clock;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
System.out.println("Clock.systemDefaultZone().getZone() : "
+ Clock.systemDefaultZone().getZone());
System.out.println("TimeZone.getDefault().toZoneId() : "
+ TimeZone.getDefault().toZoneId());
}
}
Run Code Online (Sandbox Code Playgroud)
返回此输出
Clock.systemDefaultZone().getZone() : Europe/Paris
TimeZone.getDefault().toZoneId() : Europe/Paris
Run Code Online (Sandbox Code Playgroud) Momentjs 具有calendar()漂亮的打印时间跨度的功能,如下所示。
例如:
“上周一下午 1:14”
“09/21/2017”(如果日期是前一段时间)
Java中是否有等效的功能(如果可能,Joda-Time)?
moment().subtract(10, 'days').calendar(); // 09/21/2017
moment().subtract(6, 'days').calendar(); // Last Monday at 1:14 PM
moment().subtract(3, 'days').calendar(); // Last Thursday at 1:14 PM
moment().subtract(1, 'days').calendar(); // Yesterday at 1:14 PM
moment().calendar(); // Today at 1:14 PM
moment().add(1, 'days').calendar(); // Tomorrow at 1:14 PM
moment().add(3, 'days').calendar(); // Wednesday at 1:14 PM
moment().add(10, 'days').calendar(); // 10/11/2017
Run Code Online (Sandbox Code Playgroud)