Қазір екі сағатқа созылған уақытты білу керек пе?

Қазір менің уақытым бар:

new Date();

Менде бірнеше сағат тұрақтылар бар, мысалы, 23 және 8 (бұл 11:00 немесе 23:00, 8:00 немесе 08:00). Қазір екі сағаттық тұрақты арасындағы уақытты қалай білуге ​​болады?

Кейбір бағдарлама кодын іске қосыңыз немесе екі сағаттан кейін, мысалы, егер кешкі уақытта және таңертең болмаса, кейбір кодты іске қоспасаңыз, іске қосылмау керек.

Мұнда жақсы түсіндіретін сурет:

enter image description here

Үнсіз режим өшпейтін кейбір жағдайлар:

00:00 20.06.13 - 23:00 20.06.13//after 23.00 can loud!!

23:00 20.06.13 - 15:00 20.06.13//after 15.00 can loud!!

01:00 20.06.13 - 08:00 20.06.13//after 08.00 can loud!!

21:00 20.06.13 - 08:00 20.06.13//after 08.00 can loud!!
13
Тек уақытты салыстырғыңыз келеді. Сонымен, Jan 1 00:00:00 GMT 2013 және Dec 31 00:00:00 GMT 2014 2 сағат арасында болады, дұрыс?
қосылды автор devnull, көзі
Ал енді! Бұл дәлелдеу үшін stackoverflow.com/a/17212955/2235132 жауаптары бар!
қосылды автор devnull, көзі
Сіз әлі де бір нәрсе жасадыңыз ба?
қосылды автор Rohit Jain, көзі
Мен ештеңе істемеймін. Java-ның уақыт функцияларымен шатастырамын, бұл шын мәнінде көптеген әдістер.
қосылды автор Trancer, көзі

7 жауаптар

мұны көріңіз

    int from = 2300;
    int to = 800;
    Date date = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    int t = c.get(Calendar.HOUR_OF_DAY) * 100 + c.get(Calendar.MINUTE);
    boolean isBetween = to > from && t >= from && t <= to || to < from && (t >= from || t <= to);
23
қосылды
салыстыруды жасау оңай, әйтпесе сағат пен минутты бөлек салыстыруға болады
қосылды автор Evgeniy Dorofeev, көзі
0> = 2300 || 0 <= 800 жұмыс істемейді?
қосылды автор Evgeniy Dorofeev, көзі
Спасибо .. бұл маған көмектесті
қосылды автор Pallavi, көзі
Сіздің кодыңыз жақсы жұмыс істейді деп ойлаймын. Мен оны қолданамын деп ойлаймын. Сіз қандай сағатты жүзге көбейте аласыз?
қосылды автор Trancer, көзі
Мен қазір кодты сынап жатырмын ... Мүмкін бұл жұмыс =)
қосылды автор Trancer, көзі
сағат 00:00 болса, сіздің кодыңыз жұмыс істемейді
қосылды автор Trancer, көзі
Calendar cal = Calendar.getInstance(); //Create Calendar-Object
cal.setTime(new Date());               //Set the Calendar to now
int hour = cal.get(Calendar.HOUR_OF_DAY); //Get the hour from the calendar
if(hour <= 23 && hour >= 8)             //Check if hour is between 8 am and 11pm
{
    //do whatever you want
}
10
қосылды
Кодты сәл түсіндіруіңіз керек.
қосылды автор TimWolla, көзі
Менің ойымша, дұрыс жазылған ба деп ойлаймын. Менің ойымша, бағдарлама түнде жұмыс істеуді қалайды.
қосылды автор Holger, көзі
Бұл өте қарапайым. Күнтізбені алып, сағатты Күнтізбеден алыңыз. Содан кейін сағатты сағат 23.00-ден кейін және таңертеңгі сағат 8.00-ден кейін тексеріңіз
қосылды автор Holger, көзі
Сіз әсіресе 0: 00-ге дейін қамқорлық жасауыңыз керек. Мысалы: егер сағат == 0 болса, сағат = 24 болса
қосылды автор Holger, көзі
Жақсы, егер бірінші сағат (сағат) сағат 00:00 болса, онда?
қосылды автор Trancer, көзі
Кешіріңіз, бірақ мен сіздің айтқаныңызды түсінбеймін
қосылды автор Trancer, көзі
Мен оны ауыстыру керек деп ойлаймын: if (сағат = = 23 && сағат> = 8) {// маған қажет нәрсені жасаңыз} . Бірінші сағат 01:00 болса, ол жұмыс істемейді.
қосылды автор Trancer, көзі

java.time

The modern way is with the java.time classes built into Java 8 and later. Much of the functionality is back-ported to Java 6 & 7 in the ThreeTen-Backport project and further adapted to Android in ThreeTenABP project.

Мұнда уақыт белдеуі өте маңызды. Кез-келген сәтте, күн мен уақыт аймаққа қарай әлем бойынша өзгереді.

ZoneId z = ZoneId.of( "America/Montreal" );

Өзіңіздің ағымдағы сәтті алыңыз.

ZonedDateTime zdt = ZonedDateTime.now( z );

Уақытты шығарып алыңыз. Атаудың Local бөлімі нысан ішіндегі уақыт белдеуінің тұжырымдамасы no дегенді білдіреді.

LocalTime lt = zdt.toLocalTime();

Кештің шектерін анықтаңыз.

LocalTime start = LocalTime.of( 23 , 0 ); //11 PM.
LocalTime stop = LocalTime.of( 8 , 0 ); //8 AM.

Салыстыру.

  • Біз жаңа күнде немесе сол күннің ішінде тұрып жатқанымызды анықтауымыз керек. LocalTime күннің тұжырымдамасы жоқ, 24 сағаттың бір ғана жалпы күні. Демек, басталудың басталғанға дейін немесе кейін тоқтағанын тексеру керек, өйткені әр жағдайда әр түрлі салыстыру алгоритмі қажет. start/stop> тоқтатуды қарастырайық, себебі бұл бизнес ережелеріне байланысты ерекше жағдай болуы мүмкін.

  • Аяқталу уақыты exclusive болғанда, inclusive басталатын Half-Open ретінде уақыт аралығын анықтаймыз. p>

Мұны істеудің бір жолы.

Boolean silentRunning = null ;
if( start.equals( stop ) ) {
    silentRunning = Boolean.FALSE ;
} else if( stop.isAfter( start ) ) { //Example 3 PM to 6 PM.
    silentRunning = ( ! lt.isBefore( start ) ) && lt.isBefore( stop ) ;
} else if ( stop.isBefore( start ) ) { //Example 11 PM to 8 AM.
    silentRunning = ( lt.equals( start ) || lt.isAfter( start ) ) && lt.isBefore( stop ) ;
} else {
   //Error. Should not reach this point. Paranoid check.
}

Java.time туралы

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time жобасында, қазір қызмет көрсету режимі , java.time сыныптары.

Қосымша ақпарат алу үшін Oracle Оқулық бөлімін қараңыз. Көптеген мысалдар мен түсіндірмелер үшін Stack Overflow бағдарламасын іздеңіз. Техникалық сипаттамалары: JSR 310 .

Java.time сыныптарын қайда алуға болады?

  • Java SE 8 and SE 9 and later
    • Built-in.
    • Part of the standard Java API with a bundled implementation.
    • Java 9 adds some minor features and fixes.
  • Java SE 6 and SE 7
    • Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
  • Android

UPDATE: Жоғарыда аталған жауаптың кейінгі нұсқасы. Төменде ескі.

Joda-Time

Joda-Time кітапханасы java.util.Date және күнтізбелік сабақтардың күнделікті жұмысына айтарлықтай жоғары.

Уақыт белдеуі күннің уақытын анықтау үшін өте маңызды. Әлбетте, қазір «қазір» Монреальға қарағанда Париждегі күні.

Белгілі бір уақытты таңдау әдетте жартысы ашық, [] ретінде жасалады, онда басталуы қосылады, бірақ аяқталу эксклюзивті болып табылады.

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );
Integer hour = now.getHourOfDay();
Boolean isNight = ( ( hour >= 23  ) && ( hour < 8 ) );
3
қосылды

Менің ойымша, бұл таза шешім және ол жұмыс. Мен оны түрлі уақыт параметрлері арқылы тексердім.

        /**
         * @param fromHour Start Time
         * @param toHour Stop Time
         * @param now Current Time
         * @return true if Current Time is between fromHour and toHour
         */
        boolean isTimeBetweenTwoHours(int fromHour, int toHour, Calendar now) {
            //Start Time
            Calendar from = Calendar.getInstance();
            from.set(Calendar.HOUR_OF_DAY, fromHour);
            from.set(Calendar.MINUTE, 0);
            //Stop Time
            Calendar to = Calendar.getInstance();
            to.set(Calendar.HOUR_OF_DAY, toHour);
            to.set(Calendar.MINUTE, 0);

            if(to.before(from)) {
                if (now.after(to)) to.add(Calendar.DATE, 1);
                else from.add(Calendar.DATE, -1);
            }
            return now.after(from) && now.before(to);
        }
3
қосылды

You can see a tutorial here with Date.before and you can do with Date.after

Сондай-ақ, оның миллисекундтарын алуға және оны салыстыруға болады.

2
қосылды

Сіз кіріс жолын бүтін санға түрлендіріп, оны тұрақты мәндермен салыстыра аласыз. Осылайша Күнтізбе мен Күн нысандарымен жұмыс істеудің қажеті жоқ.

public class testDateRange {

    static final int START_HOUR = 8;
    static final int END_HOUR = 23;

    public static void main(String[] args) {
        String now_time = new SimpleDateFormat("HH:mm").format(new Date());
        System.err.println(isInRange(Integer.parseInt(now_time.replace(":","")),START_HOUR*100,END_HOUR*100));

    }

    private static boolean isInRange(int now_time, int start_time, int end_time) {

       if ((now_time>start_time)&&
               (now_time
1
қосылды
START_HOUR = 23 және END_HOUR = 23 болса, осы кодты пайдалана аламыз ба?
қосылды автор Ali Tofigh, көзі

мұнда тек тексерулер қазір (ағымдағы уақыт) арасында да болады 1-ден 4-ке дейін 4-тен 8-ге дейін 8-ден 12-ге дейін 12-ден 16-ға дейін 16-дан 20-ға дейін 20-дан 1-ге дейін және келесі уақытты қайтарады.

private Calendar GetTimeDiff() throws ParseException {
    Calendar now = Calendar.getInstance();

    Calendar one = Calendar.getInstance();
    one.set(Calendar.HOUR_OF_DAY, 1);
    one.set(Calendar.MINUTE, 0);
    one.set(Calendar.SECOND, 0);

    Calendar four = Calendar.getInstance();
    four.set(Calendar.HOUR_OF_DAY, 4);
    four.set(Calendar.MINUTE, 0);
    four.set(Calendar.SECOND, 0);

    Calendar eight = Calendar.getInstance();
    eight.set(Calendar.HOUR_OF_DAY, 8);
    eight.set(Calendar.MINUTE, 0);
    eight.set(Calendar.SECOND, 0);

    Calendar twelve = Calendar.getInstance();
    twelve.set(Calendar.HOUR_OF_DAY, 12);
    twelve.set(Calendar.MINUTE, 0);
    twelve.set(Calendar.SECOND, 0);

    Calendar sixteen = Calendar.getInstance();
    sixteen.set(Calendar.HOUR_OF_DAY, 16);
    sixteen.set(Calendar.MINUTE, 0);
    sixteen.set(Calendar.SECOND, 0);

    Calendar twenty = Calendar.getInstance();
    twenty.set(Calendar.HOUR_OF_DAY, 20);
    twenty.set(Calendar.MINUTE, 0);
    twenty.set(Calendar.SECOND, 0);

    if(now.getTime().after(one.getTime()) && now.getTime().before(four.getTime())) {
        return four;
    }

    if(now.getTime().after(four.getTime()) && now.getTime().before(eight.getTime())) {
        return eight;
    } 

    if(now.getTime().after(eight.getTime()) && now.getTime().before(twelve.getTime())) {
        return twelve;
    } 

    if(now.getTime().after(twelve.getTime()) && now.getTime().before(sixteen.getTime())) {
        return sixteen;
    } 

    if(now.getTime().after(sixteen.getTime()) && now.getTime().before(twenty.getTime())) {
        return twenty;
    } 

    if(now.getTime().after(twenty.getTime()) && now.getTime().before(one.getTime())) {
        return one;
    }

    return now;
}
0
қосылды