我有一个日历对象[localDate],它位于美国东部时间:比如11月6日,15:34 ......我将时区设置为格林尼治标准时间+5:30 ......现在,当我这样做时,Calendar.HOUR_OF_DAY它返回给我2 ...我知道是完美的..从格林威治标准时间15:34 + 5小时到时区+5:30到达时区..这只是意味着26:04这是第7个中的第2个.
然而,日期仍然保持11月6日... localDate.getTime()仍然返回11月6日...甚至当我打印localDate ..它显示时区为+5:30,但是那天和其他一切仍然是原来的本地时间.. [即11月6日]
我根本无法理解为什么......
编辑::
所以我知道我不需要更改日期和时区.只更改显示适合该位置的日期的方式,并且可以使用已设置的时区完成.
String s = 19.17.38.008000;
DateFormat f = new SimpleDateFormat("HH.mm.ss.SSSSSS");
Date d = f.parse(s);
system.out.println(d);
Run Code Online (Sandbox Code Playgroud)
这是我正在运行的代码运行正常,除非它打印时打印时间为19:17:46.请有人向我解释一下
作为旁注:
String s = 19.17.38.008000;
DateFormat f = new SimpleDateFormat("HH.mm.ss");
Date d = f.parse(s);
system.out.println(d);
Run Code Online (Sandbox Code Playgroud)
此代码将正确打印相同的字符串减去毫秒.有人请告诉我这里缺少什么.
编辑:谢谢你的答案我认为这里的问题是我正在读取38.008000为.008秒,但sdf读取SSS为8000毫秒,这是不一样的.
下面的代码有什么问题?它为一年中的任何日期提供错误的日期。
import java.util.Scanner;
import java.util.Calendar;
public class Solution {
public static String getDay(String d, String m, String y) {
String[] days = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
Calendar c = Calendar.getInstance();
c.set(Integer.parseInt(y), Integer.parseInt(m), Integer.parseInt(d));
return days[c.get(Calendar.DAY_OF_WEEK) - 1];
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String m = in.next();
String d = in.next();
String y = in.next();
System.out.println(getDay(d, m, y));
}
}
Run Code Online (Sandbox Code Playgroud) 我正在根据给定月份的天数进行一些计算,
确定当前年月
Date date = new Date();
Year = YearFormat.format(date);
Month = MonthFormat.format(date);
Run Code Online (Sandbox Code Playgroud)
确定当月有多少天
int year = Integer.valueOf(Year);
int month = Integer.valueOf(Month);
Calendar calendarD = new GregorianCalendar(year, month, 1);
int noOfDaysOfMonth = calendarD.getActualMaximum(Calendar.DAY_OF_MONTH);
Run Code Online (Sandbox Code Playgroud)
问题
noOfDaysOfMonth 似乎没有给我正确的天数。
例如year = 2018 , month = 8给了我30我期望的31
如何将 JavaCalendar对象从本地时间转换为 UTC?这是我尝试过的:
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
calendar.setTime(localDateTime.getTime());
SimpleDateFormat outputFmt = new SimpleDateFormat("MMM dd, yyy h:mm a zz");
String dateAsString = outputFmt.format(calendar.getTime());
System.out.println(dateAsString)
Run Code Online (Sandbox Code Playgroud)
时间始终以 MT 格式显示,而不是 GMT 格式。我想将日历以 UTC 格式存储在数据库中(我不关心格式化或显示时间)。
我想在当前日期中添加 30 天,我进行了很多搜索,但没有找到正确的解决方案。
我的代码
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd");
Calendar c1 = Calendar.getInstance();
String currentdate = df.format(date);
try {
c1.setTime(df.parse(currentdate));
c1.add(Calendar.DATE, 30);
df = new SimpleDateFormat("yyyy-MM-dd");
Date resultdate = new Date(c1.getTimeInMillis());
String dueudate = df.format(resultdate);
Toast.makeText(this, dueudate, Toast.LENGTH_SHORT).show();
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是:2019-01-29 我不明白为什么它显示这个输出任何人都可以帮助我。
所以,我找到了java.util.Calendar,并尝试将它用于我正在研究的android项目.
我完全不明白Calendar.DAY_OF_WEEK如何在星期四返回7?现在当它是八月Calendar.WEEK_OF_YEAR返回4,这根本没有任何意义!
我也尝试了GregorianCalendar,它给出了完全相同的结果.
试图找到有关它们如何计算的任何文档,但我找不到任何东西.似乎有一些非常明显的东西,但我无法找出它是什么!
我写的代码在这里:
// Get if daily or weekly
boolean daily;
daily = getPrefs.getBoolean("checkbox_daily", false);
String day = "0";
if (daily){
switch(GregorianCalendar.DAY_OF_WEEK){
case GregorianCalendar.MONDAY:
Do_stuff();
break;
case GregorianCalendar.TUESDAY:
Do_stuff();
break;
case GregorianCalendar.WEDNESDAY:
Do_stuff();
break;
case GregorianCalendar.THURSDAY:
Do_stuff();
break;
case GregorianCalendar.FRIDAY:
Do_stuff();
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,我需要知道如何比较两个小时.
例如:我的商店开放06:30 am和关闭17:00 pm,我需要在Textview中显示17:00 pm我的商店关闭后,以及06:00 am我的商店开放后,从周一到周五.
我怎样才能做到这一点?
我收到多个错误:
一个在int打开的时候我把06:30用":"
两个星期一到星期五的限制
请在下面找到我的代码:
public void timer () {
Calendar c = Calendar.getInstance();
int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
int open = 6:30; // 1 ERROR HERE WITH ":"
int close = 17;
if(timeOfDay < close){
hour.setText.("OPEN");
}}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
我试图获取月份价值。但我想检查java.util或java.time中哪个更好,以检索月份值。这是我的代码,用于检查Calender vs ZonedDateTime的性能。
//import java.time.Instant;
//import java.time.ZonedDateTime;
//import java.util.Calendar;
Instant instant, instant2;
String diff;
instant = Instant.now();
int month2 = Calendar.getInstance().get(Calendar.MONTH) + 1;
instant2 = Instant.now();
diff = String.valueOf(instant2.getNano() - instant.getNano());
System.out.println("month value " + month2 + "at: " + diff);
instant = Instant.now();
int month1 = ZonedDateTime.now().getMonth().getValue();
instant2 = Instant.now();
diff = String.valueOf(instant2.getNano() - instant.getNano());
System.out.println("month value " + month1 + "at: " + diff);
Run Code Online (Sandbox Code Playgroud)
我认为java.time比java.util更好。因此,我期望ZonedDateTime比日历更好。但是在这里我发现了相反的情况。我的结果是:
month value 6at: 0 //Calendar
month value 6at: 9000000 //ZonedDateTime
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样。以及为什么我应该使用java.util.Calender而不是java.timeZonedDateTime的任何建议。
PS我什至把在month1之后的month2取回为:
Instant …Run Code Online (Sandbox Code Playgroud) 我正在使用Timestamp当前时间的类来设置时间。Calendar我先用 来DAY_OF_WEEK设置上课时间DAY_OF_MONTH。I\xe2\x80\x99m 每次都得到相同的输出。DAY_OF_MONTH那么和之间有什么区别DAY_OF_WEEK?
Timestamp followUpDateBegins = new Timestamp(System.currentTimeMillis());\n\n Calendar cal = Calendar.getInstance();\n cal.setTime(followUpDateBegins);\n cal.add(Calendar.DAY_OF_WEEK, -30);\n cal.set(Calendar.HOUR, 0);\n cal.set(Calendar.MINUTE, 0);\n cal.set(Calendar.SECOND, 0);\n cal.set(Calendar.MILLISECOND, 0);\n\n followUpDateBegins.setTime(cal.getTime().getTime());\n System.out.println("followUpDateBegins "+followUpDateBegins);\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\n Timestamp followUpDateBeginsSecond = new Timestamp(System.currentTimeMillis());\n\n cal.setTime(followUpDateBeginsSecond);\n cal.add(Calendar.DAY_OF_MONTH, -30);\n cal.set(Calendar.HOUR, 0);\n cal.set(Calendar.MINUTE, 0);\n cal.set(Calendar.SECOND, 0);\n cal.set(Calendar.MILLISECOND, 0);\n\n followUpDateBeginsSecond.setTime(cal.getTime().getTime());\n System.out.println("followUpDateBegins" + followUpDateBeginsSecond);\nRun Code Online (Sandbox Code Playgroud)\n 但是当我得到一年中的第几周时,它错误地将一年中的一周返回为 1。与一年中的一周相同,月中的一周值也错误。它返回 6。但它应该是 5。
以下是日历实例值的输出
java.util.GregorianCalendar[time=1514678400000,
areFieldsSet=true,
areAllFieldsSet=true,
lenient=true,
zone=sun.util.calendar.ZoneInfo[id="UTC",
offset=0, dstSavings=0, useDaylight=false, transitions=0, lastRule=null],
firstDayOfWeek=1, minimalDaysInFirstWeek=1, ERA=1, YEAR=2017, MONTH=11, WEEK_OF_YEAR=1, WEEK_OF_MONTH=6, DAY_OF_MONTH=31, DAY_OF_YEAR=365, DAY_OF_WEEK=1, DAY_OF_WEEK_IN_MONTH=5, AM_PM=0, HOUR=0, HOUR_OF_DAY=0, MINUTE=0, SECOND=0, MILLISECOND=0, ZONE_OFFSET=0, DST_OFFSET=0]
Run Code Online (Sandbox Code Playgroud)