精华内容
下载资源
问答
  • 1、用于线程任务调度,当同一个任务时遵循队列形式执行,根据不同业务场景自定等待任务waitForNextTick(),调起业务逻辑notifyExpired()任务执行完成进入线程等待run()import java.util.LinkedList;import java.util...

    1、用于线程任务调度,当同一个任务时遵循队列形式执行,根据不同业务场景

    自定等待任务waitForNextTick(),调起业务逻辑notifyExpired()

    任务执行完成进入线程等待run()

    import java.util.LinkedList;

    import java.util.Map;

    import java.util.Queue;

    import java.util.Set;

    import java.util.concurrent.ConcurrentHashMap;

    import java.util.concurrent.CopyOnWriteArrayList;

    import java.util.concurrent.TimeUnit;

    import java.util.concurrent.atomic.AtomicBoolean;

    public class TimingWheel {

    //控制任务周期 TimeUnit控制时间单位

    private final long tickDuration;

    //任务队列

    private Queue> wheel ;

    //调取业务逻辑

    private final CopyOnWriteArrayList> expirationListeners = new CopyOnWriteArrayList>();

    //控制任务唯一性

    private final Map> indicator = new ConcurrentHashMap<>();

    //标识线程是否中断

    private final AtomicBoolean shutdown = new AtomicBoolean(false);

    //执行任务线程

    private Thread workerThread;

    // ~ -------------------------------------------------------------------------------------------------------------

    /**

    * 初始化定时

    * @param tickDuration

    * @param timeUnit

    */

    public TimingWheel(int tickDuration, TimeUnit timeUnit,int room) {

    if (timeUnit == null) {

    throw new NullPointerException("unit");

    }

    if (tickDuration <= 0) {

    throw new IllegalArgumentException("tickDuration must be greater than 0: " + tickDuration);

    }

    this.wheel = new LinkedList<>();

    this.tickDuration = TimeUnit.MILLISECONDS.convert(tickDuration, timeUnit);

    workerThread = new Thread(new TickWorker(), "Timing-Wheel:"+room);

    }

    public void start() {

    if (shutdown.get()) {

    throw new IllegalStateException("Cannot be started once stopped");

    }

    if (!workerThread.isAlive()) {

    workerThread.start();

    }

    }

    public boolean stop() {

    if (!shutdown.compareAndSet(false, true)) {

    return false;

    }

    boolean interrupted = false;

    while (workerThread.isAlive()) {

    workerThread.interrupt();

    try {

    workerThread.join(100);

    } catch (InterruptedException e) {

    interrupted = true;

    }

    }

    if (interrupted) {

    Thread.currentThread().interrupt();

    }

    return true;

    }

    public void addExpirationListener(ExpirationListener listener) {

    expirationListeners.add(listener);

    }

    public void removeExpirationListener(ExpirationListener listener) {

    expirationListeners.remove(listener);

    }

    public long add(E e) {

    synchronized(e) {

    checkAdd(e);

    Slot slot = new Slot<>(System.currentTimeMillis());

    slot.add(e);

    wheel.offer(slot);

    indicator.put(e, slot);

    return tickDuration;

    }

    }

    public long getSize() {

    return indicator.size();

    }

    private void checkAdd(E e) {

    Slot slot = indicator.get(e);

    if (slot != null) {

    slot.remove(e);

    }

    }

    public boolean remove(E e) {

    synchronized (e) {

    Slot slot = indicator.get(e);

    if (slot == null) {

    return false;

    }

    indicator.remove(e);

    return slot.remove(e) != null;

    }

    }

    //

    private void notifyExpired() {

    Slot slot = wheel.poll();

    Set elements = slot.elements();

    if(elements.isEmpty())

    {

    return;

    }

    for (E e : elements) {

    synchronized (e) {

    Slot latestSlot = indicator.get(e);

    if (latestSlot.equals(slot)) {

    indicator.remove(e);

    }

    }

    for (ExpirationListener listener : expirationListeners) {

    listener.expired(e);

    }

    }

    }

    private void callExpired() {

    Slot slot = wheel.element();

    Set elements = slot.elements();

    if(elements.isEmpty())

    {

    return;

    }

    for (E e : elements) {

    for (ExpirationListener listener : expirationListeners) {

    listener.expired(e);

    }

    }

    }

    // ~ -------------------------------------------------------------------------------------------------------------

    private class TickWorker implements Runnable {

    private long startTime;

    private long tick;

    @Override

    public void run() {

    startTime = System.currentTimeMillis();

    tick = 1;

    for (int i = 0; !shutdown.get(); i++) {

    while (wheel.isEmpty())

    {

    try {

    Thread.sleep(1000);

    } catch (InterruptedException e) {

    continue;

    }

    }

    //等待下一个任务

    waitForNextTick();

    //执行任务

    notifyExpired();

    }

    }

    private void waitForNextTick() {

    Slot slot = wheel.element();

    //初始等待时间

    long currentWaitTime = slot.currentAddTime == 0 ? System.currentTimeMillis() : slot.currentAddTime;

    for (;;) {

    long currentTime = System.currentTimeMillis();

    //从添加任务开始算等待时间

    long lastTime = tickDuration - (currentTime - currentWaitTime);

    //long sleepTime = tickDuration - (tickDuration - 1000L);

    if (lastTime <= 0) {

    break;

    }

    try {

    Thread.sleep(1000l);

    callExpired();

    } catch (InterruptedException e) {

    return;

    }

    }

    tick++;

    }

    }

    private static class Slot {

    private int id;

    private long currentAddTime;

    private Map elements = new ConcurrentHashMap();

    public Slot(long currentAddTime) {

    this.currentAddTime = currentAddTime;

    }

    public void add(E e) {

    elements.put(e, e);

    }

    public E remove(E e) {

    return elements.remove(e);

    }

    public Set elements() {

    return elements.keySet();

    }

    @Override

    public int hashCode() {

    final int prime = 31;

    int result = 1;

    result = prime * result + id;

    return result;

    }

    @Override

    public boolean equals(Object obj) {

    if (this == obj)

    return true;

    if (obj == null)

    return false;

    if (getClass() != obj.getClass())

    return false;

    @SuppressWarnings("rawtypes")

    Slot other = (Slot) obj;

    if (id != other.id)

    return false;

    return true;

    }

    @Override

    public String toString() {

    return "Slot [id=" + id + ", elements=" + elements + "]";

    }

    }

    }

    来源:https://www.cnblogs.com/itjiandan/p/11685748.html

    展开全文
  • 1、用于线程任务调度,当同一个任务时遵循队列形式执行,根据不同业务场景自定等待任务waitForNextTick(),调起业务逻辑notifyExpired()任务执行完成进入线程等待run()import java.util.LinkedList;import java.util...

    1、用于线程任务调度,当同一个任务时遵循队列形式执行,根据不同业务场景

    自定等待任务waitForNextTick(),调起业务逻辑notifyExpired()

    任务执行完成进入线程等待run()

    import java.util.LinkedList;

    import java.util.Map;

    import java.util.Queue;

    import java.util.Set;

    import java.util.concurrent.ConcurrentHashMap;

    import java.util.concurrent.CopyOnWriteArrayList;

    import java.util.concurrent.TimeUnit;

    import java.util.concurrent.atomic.AtomicBoolean;

    public class TimingWheel {

    //控制任务周期 TimeUnit控制时间单位

    private final long tickDuration;

    //任务队列

    private Queue> wheel ;

    //调取业务逻辑

    private final CopyOnWriteArrayList> expirationListeners = new CopyOnWriteArrayList>();

    //控制任务唯一性

    private final Map> indicator = new ConcurrentHashMap<>();

    //标识线程是否中断

    private final AtomicBoolean shutdown = new AtomicBoolean(false);

    //执行任务线程

    private Thread workerThread;

    // ~ -------------------------------------------------------------------------------------------------------------

    /**

    * 初始化定时

    * @param tickDuration

    * @param timeUnit

    */

    public TimingWheel(int tickDuration, TimeUnit timeUnit,int room) {

    if (timeUnit == null) {

    throw new NullPointerException("unit");

    }

    if (tickDuration <= 0) {

    throw new IllegalArgumentException("tickDuration must be greater than 0: " + tickDuration);

    }

    this.wheel = new LinkedList<>();

    this.tickDuration = TimeUnit.MILLISECONDS.convert(tickDuration, timeUnit);

    workerThread = new Thread(new TickWorker(), "Timing-Wheel:"+room);

    }

    public void start() {

    if (shutdown.get()) {

    throw new IllegalStateException("Cannot be started once stopped");

    }

    if (!workerThread.isAlive()) {

    workerThread.start();

    }

    }

    public boolean stop() {

    if (!shutdown.compareAndSet(false, true)) {

    return false;

    }

    boolean interrupted = false;

    while (workerThread.isAlive()) {

    workerThread.interrupt();

    try {

    workerThread.join(100);

    } catch (InterruptedException e) {

    interrupted = true;

    }

    }

    if (interrupted) {

    Thread.currentThread().interrupt();

    }

    return true;

    }

    public void addExpirationListener(ExpirationListener listener) {

    expirationListeners.add(listener);

    }

    public void removeExpirationListener(ExpirationListener listener) {

    expirationListeners.remove(listener);

    }

    public long add(E e) {

    synchronized(e) {

    checkAdd(e);

    Slot slot = new Slot<>(System.currentTimeMillis());

    slot.add(e);

    wheel.offer(slot);

    indicator.put(e, slot);

    return tickDuration;

    }

    }

    public long getSize() {

    return indicator.size();

    }

    private void checkAdd(E e) {

    Slot slot = indicator.get(e);

    if (slot != null) {

    slot.remove(e);

    }

    }

    public boolean remove(E e) {

    synchronized (e) {

    Slot slot = indicator.get(e);

    if (slot == null) {

    return false;

    }

    indicator.remove(e);

    return slot.remove(e) != null;

    }

    }

    //

    private void notifyExpired() {

    Slot slot = wheel.poll();

    Set elements = slot.elements();

    if(elements.isEmpty())

    {

    return;

    }

    for (E e : elements) {

    synchronized (e) {

    Slot latestSlot = indicator.get(e);

    if (latestSlot.equals(slot)) {

    indicator.remove(e);

    }

    }

    for (ExpirationListener listener : expirationListeners) {

    listener.expired(e);

    }

    }

    }

    private void callExpired() {

    Slot slot = wheel.element();

    Set elements = slot.elements();

    if(elements.isEmpty())

    {

    return;

    }

    for (E e : elements) {

    for (ExpirationListener listener : expirationListeners) {

    listener.expired(e);

    }

    }

    }

    // ~ -------------------------------------------------------------------------------------------------------------

    private class TickWorker implements Runnable {

    private long startTime;

    private long tick;

    @Override

    public void run() {

    startTime = System.currentTimeMillis();

    tick = 1;

    for (int i = 0; !shutdown.get(); i++) {

    while (wheel.isEmpty())

    {

    try {

    Thread.sleep(1000);

    } catch (InterruptedException e) {

    continue;

    }

    }

    //等待下一个任务

    waitForNextTick();

    //执行任务

    notifyExpired();

    }

    }

    private void waitForNextTick() {

    Slot slot = wheel.element();

    //初始等待时间

    long currentWaitTime = slot.currentAddTime == 0 ? System.currentTimeMillis() : slot.currentAddTime;

    for (;;) {

    long currentTime = System.currentTimeMillis();

    //从添加任务开始算等待时间

    long lastTime = tickDuration - (currentTime - currentWaitTime);

    //long sleepTime = tickDuration - (tickDuration - 1000L);

    if (lastTime <= 0) {

    break;

    }

    try {

    Thread.sleep(1000l);

    callExpired();

    } catch (InterruptedException e) {

    return;

    }

    }

    tick++;

    }

    }

    private static class Slot {

    private int id;

    private long currentAddTime;

    private Map elements = new ConcurrentHashMap();

    public Slot(long currentAddTime) {

    this.currentAddTime = currentAddTime;

    }

    public void add(E e) {

    elements.put(e, e);

    }

    public E remove(E e) {

    return elements.remove(e);

    }

    public Set elements() {

    return elements.keySet();

    }

    @Override

    public int hashCode() {

    final int prime = 31;

    int result = 1;

    result = prime * result + id;

    return result;

    }

    @Override

    public boolean equals(Object obj) {

    if (this == obj)

    return true;

    if (obj == null)

    return false;

    if (getClass() != obj.getClass())

    return false;

    @SuppressWarnings("rawtypes")

    Slot other = (Slot) obj;

    if (id != other.id)

    return false;

    return true;

    }

    @Override

    public String toString() {

    return "Slot [id=" + id + ", elements=" + elements + "]";

    }

    }

    }

    展开全文
  • 这篇文章主要介绍了如何通过Java实现时间轴过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1.需要添加FastJson的依赖处理数据。...3.创建entity、dao、...

    这篇文章主要介绍了如何通过Java实现时间轴过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    1.需要添加FastJson的依赖处理数据。

    com.alibaba

    fastjson

    1.2.47

    2.创建测试数据库和表。

    914cd4ba0e0322ec2f226c9442180fc0.png

    3.创建entity、dao、service、controller各层,可以使用EasyCode快速生成(之前博客有教程),然后增减代码。

    entity

    private static final long serialVersionUID = 423496079020131231L;

    private Integer id;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")

    private Date time;

    private String content;

    public Integer getId() {

    return id;

    }

    public void setId(Integer id) {

    this.id = id;

    }

    public Date getTime() {

    return time;

    }

    public void setTime(Date time) {

    this.time = time;

    }

    public String getContent() {

    return content;

    }

    public void setContent(String content) {

    this.content = content;

    }

    dao

    /**

    * 获取所有数据

    * @return

    */

    List getAllData();

    service

    /**

    * 获取所有数据

    * @return

    */

    List getAllData();

    serviceimpl

    @Resource

    private InfoDao infoDao;

    /**

    * 获取所有数据

    * @return

    */

    public List getAllData(){

    return this.infoDao.getAllData();

    }

    controller

    @Resource

    private InfoDao infoDao;

    /**

    * 获取所有数据

    * @return

    */

    public List getAllData(){

    return this.infoDao.getAllData();

    }

    mapper

    select * from ideatest.info order by time desc

    4.前端js、css、html文件编写。

    html

    时间轴

    css

    * {

    margin: 0;

    padding: 0;

    }

    .container {

    margin: 20px;

    }

    .container .time-line {

    position: relative;

    width: 0;

    border-right: 1px gray dashed;

    }

    .container .square {

    position: absolute;

    width: 10px;

    height: 10px;

    margin-left: -5px;

    background-color: gray;

    }

    .container .square .time {

    position: absolute;

    width: 300px;

    height: 30px;

    margin-top: -10px;

    margin-left: 20px;

    line-height: 30px;

    }

    .container .square .content {

    position: absolute;

    width: 300px;

    height: 60px;

    margin-top: 20px;

    margin-left: 20px;

    line-height: 60px;

    }

    js

    $.ajax({

    url: "/info/getAllData",

    type: "GET",

    success: function(data) {

    success(data);

    }

    });

    function success(data) {

    var result = JSON.parse(data);

    $(".container .time-line").css({

    "height": result.length * 100 + "px"

    });

    for (var i = 0; i < result.length; i++) {

    var childNode = "

    " +

    "

    "+result[i].time+"
    " +

    "

    " + result[i].content + "
    " +

    "

    ";

    $(".container .time-line").append(childNode);

    }

    }

    Ps:因为数据库的时区问题,所以可在数据库的连接URL后添加如下参数:

    serverTimezone=Hongkong

    5.效果展示

    955c8593dc66a7dc8ef81172bcca4113.gif

    展开全文
  • JAVA时间轴实现

    千次阅读 2018-11-07 15:51:00
    基础的也是在网上百度看到的然后加上自己需求做了一些改动,因为自己需要所以从后台request一个集合传值前端至JSP实现! 以下是完整的代码实现 ... /*时间轴*/ .timezone { width: 6px; height: ${size}px; ...

    基础的也是在网上百度看到的然后加上自己需求做了一些改动,因为自己需要所以从后台request一个集合传值前端至JSP实现!

    以下是完整的代码实现

    样式,根据自己的需求可以调整!

    <style type="text/css">
        /*时间轴*/
        .timezone {
            width: 6px;
            height: ${size}px;
            background: #01814A; /*显示数轴*/
            margin-left: 20%;
            margin-top: 40px;
            border-radius: 3px;
            position: relative;
        }
    
        @-webkit-keyframes heightSlide {
            0% {
                height: 0;
            }
            100% {
                height: 450px;
            }
        }
    
        /*圆点*/
        .timezone .time {
            position: absolute;
            margin-left: -10px;
            margin-top: -10px;
            width: 20px;
            height: 20px;
            border-radius: 50%;
            border: 4px solid rgba(255, 255, 255, 0.5);
            background: #01814A;
            -webkit-transition: all 0.5s;
            -webkit-animation: showIn ease;
        }
    
        <c:forEach var="list" items="${list}" varStatus="s">
        .timezone .time:nth-child(${s.index+1}) {
            -webkit-animation-duration: ${s.index/2+1}s;
        }
        </c:forEach>
    
    
        @-webkit-keyframes showIn {
            0%,
            70% {
                opacity: 0;
            }
            100% {
                opacity: 1;
            }
        }
    
        .timezone .time h2 {
            position: absolute;
            margin-left: -150px;
            margin-top: 3px;
            color: #01814A;
            font-size: 14px;
            cursor: pointer;
            -webkit-transition: all 0.5s;
        }
    
        .timezone .time div {
            position: absolute;
            top: 50%;
            margin-top: -20px;
            left: 50px;
            width: 300px;
            height: 40px;
            line-height: 40px;
            background: #01814A;
            border: 3px solid #01814A;
            border-radius: 10px;
            z-index: 2;
            overflow: hidden;
            cursor: pointer;
            -webkit-transition: all 0.5s;
        }
    
        .timezone .time div p {
            color: #fff;
            margin-top: 10px;
            margin-left: -40px;
            text-align: center;
        }
    
        .timezone .time:before {
            content: '';
            position: absolute;
            top: 0px;
            left: 32px;
            width: 0px;
            height: 0px;
            border: 10px solid transparent;
            border-right: 10px solid #01814A;
            -webkit-transition: all 0.5s;
        }
    
        .timezone .time div ul {
            list-style: none;
            width: 300px;
            padding: 5px 0 0;
            color: #fff;
            text-align: center;
        }
    </style>
    

    JSP版块:

    <div class="pageContent" style="background: #eeeeee;">
        <div class="pageFormContent" layoutH="55">
            <div class="timezone">
                <c:forEach var="list" items="${list}" varStatus="s">
                    <div class="time" <c:if test="${s.index!=0}"> style="top: ${s.index*100}px;"</c:if> >
                        <h2><fmt:formatDate value="${list.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></h2>
                        <div>
                            <p>${list.applyYear}年第${list.serialNo}期&nbsp<span>${list.type}</span></p>
                        </div>
                    </div>
    
                </c:forEach>
    
    
            </div>
        </div>
        <div class="formBar"></div>
    </div>
    

    后台控制层实现,调用接口获取一个集合!

        @RequestMapping("/view")
        public String view(HttpServletRequest request) {
            try {
                List<MeetingFlowTime> meetingFlowTimes = partyIssueInfoService.selectFlowTimeAll();
                request.setAttribute("list",meetingFlowTimes);
                int size = meetingFlowTimes.size();
                size =(size-1)*100;
                request.setAttribute("size",size);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return "dwz/management/issueDeclaration/view";
        }
    

    在这里插入图片描述

    这是一个时间轴实现的全过程,自己上传留着以后用,有用的着的可以看看!

    展开全文
  • void processLine(String line...= -1) { // 这一行是时间轴// 将字幕显示的起始时间和结束时间分开。String timespan[] = line.split("-->");// 起始时间的小时、分、秒、毫秒分开。String begin[] = timespan[0...
  • 因此我尝试将其设置为当空格键被按下以进行攻击时,它将启动时间轴,然后时间轴将以较慢的速率通过攻击图像阵列 . 我希望时间轴运行15次(攻击阵列的大小),显示攻击阵列中的所有图像,然后返回游戏 . 我不确定我...
  • 从http://www.oracle.com/technetwork/java/javafx/samples/index.html下载Ensemble sample动态图表有几个...要在上显示时间,您可以使用字符串和DateFormatter:BarChart chart = new BarChart<>(new Cat...
  • 1.需要添加FastJson的依赖处理数据。... 3.创建entity、dao、service、controller各层,可以使用EasyCode快速生成(之前博客有教程),然后增减代码。 entity private static final long serialVersionUID = ... html时间轴
  • java轴_Java实现时间轴

    2021-02-12 11:52:45
    1.需要添加FastJson的依赖处理数据。... 3.创建entity、dao、service、controller各层,可以使用EasyCode快速生成(之前博客有教程),然后增减代码。 entity private static final long serialVersionUID = ... html时间轴
  • 这篇文章主要介绍了如何通过Java实现时间轴过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1.需要添加FastJson的依赖处理数据。...3.创建entity、dao、...
  • 本篇文章会说下如何使用并且要用麻烦的自定义 view 去实现时间轴效果,以及如何分析、实现自定义 view。 需要具备的知识:Paint、Canvas、自定义 view 的绘制流程。欢迎留言交流。一、已经有很多 RecycleView 实现...
  • 主要介绍了如何通过Java实现时间轴过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 这篇文章主要介绍了Java日期时间及日期相互转换实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下java.util 包提供了 Date 类来封装当前的日期和时间。...
  • 时间轴效果(java

    2017-07-11 20:19:29
    项目中用到类似时间轴的效果,所以使用自定义View实现。
  • 1.需要添加FastJson的依赖处理数据。... 3.创建entity、dao、service、controller各层,可以使用EasyCode快速生成(之前博客有教程),然后增减代码。 entity private static final long serialVersionUID = ... html时间轴
  • css3-company-timeline\css\style.csscss3-company-timeline\images\bg_1.jpgcss3-company-timeline\images\bg_2.jpgcss3-company-timeline\images\btn_totop.pngcss3-company-timeline\images\ic_arr.pngcss3-compa...
  • 在我们的Web应用程序中,我们需要显示并输入不同国家/地区在不同时区的日期时间信息。目前,我们正在为每个国家/地区维护单独的Web服务器和单独的数据库(oracle 11g)。我们计划将所有数据库合并为一个数据库(Oracle ...
  • 引: ​ 努力的回想了一下,第一次听到开发语言大概是在初中,初中时去附近大学机房打游戏时听到网管(应该是大学在校生)说VB开发什么东西。...​ 随着时间推移,还有哪些技术也在发展变化,早先的技术发
  • // 2015-10-18T01:00-02:00[America/Sao_Paulo] 截断发生在本地时间轴上。 如果选择DAYS,则选择午夜。 根据javadoc,ZonedDateTime方法最终将转换回新的ZonedDateTime,并将时间向前移动间隔的大小(1小时)。 对于...
  • 技术帖 自行车中轴的种类 入门车友请细读作者:燃情单车发布时间:2016-07-26 16:31:47来源:燃情单车很多新入门车友总是分不清楚自行车中轴的种类与规格,小编特意整理了市面常规常用的中轴种类,供大家参考。...
  • 2015年到2019年: 说明: ​ 明显前端的版本发布周期密度更高,说明多设备互联带来了更丰富的软件应用场景,为适应这些场景前端技术需要及时,更快的适配。
  • 2010年到2015年: 说明: ​ 云计算及更丰富的设备可并入软件系统,前后端技术同时发展,随着前端设备的及相关技术的多样化,前端技术更加细化。
  • 2006年到2010年: 说明: ​ 前端技术发展,同时前后端技术分工更为细致。(背后也有移动端技术的推波助澜)
  • 1998年到2002年: 说明: ​ 进入网络泡沫破灭期,同时前端技术发展缓慢。
  • 2002年到2006年: 说明: ​ 网络泡沫破裂后,技术又开始缓缓复苏。新的技术开始出现。
  • /*** 生成时间轴数据, 从当前 年月日 往前推到几天的日期* @param month* @param qian 前几天的日期* @return yyyyMMdd*/public static String genTimeAxisData4LastDayOfMonthAsStr_2(int year,int month,int dd,...
  • 如图上文字描述,选择开始时间,结束时间,输入步长后,点击确认,滚动条会从开始时间开始,每隔600s滚动条就位移,中间蓝色区域显示开始时间经过600s后的时间,以此类推。 同时,当自己滑动滚动条时,中间蓝色区域...
  • 2019年到现在: 说明: ​ 疫情的因素减少了各种业务活动,带来的直接影响是版本发布的节奏也趋于平缓。同时也说明,大的厂商对业务的影响更小,更能保持之前计划的版本节奏。 总结: ​ 技术的发展是为了满足...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 539
精华内容 215
关键字:

java时间轴

java 订阅