java开发问题

Posted 脚丫先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java开发问题相关的知识,希望对你有一定的参考价值。

一、java中年月日比大小

方法一:用毫秒比较,虽然是伪毫秒,但是相当精确

String date1 = "2007-10-12 18:35:00";
String date2 = "2008-10-12 18:35:00";
String pattern ="yyyy-MM-dd hh:mm:ss";
SimpleDateFormat sf = new SimpleDateFormat(pattern);
Date d1 = sf.parse(date1);
Date d2 = sf.parse(date2);
if(d1.getTime() > d2.getTime()){
System.out.println("date 1 > date 2");
}else{
System.out.println("date 1 < date 2");
}

方法二: Date类型就可直接比较的

Date a=...
Date b=...
int i=a.compareTo(b);
if(i>0)...
else if(i<0)...
else ...

二、java使用new Date()和System.currentTimeMillis()获取当前时间戳

在开发过程中,通常很多人都习惯使用new Date()来获取当前时间,使用起来也比较方便,同时还可以获取与当前时间有关的各方面信息,例如获取小时,分钟等等,而且还可以格式化输出,包含的信息是比较丰富的。但是有些时候或许你并不需要获取那么多信息,你只需要关心它返回的毫秒数就行了,例如getTime()。为了获取这个时间戳,很多人也喜欢使用new Date().getTime()去获取,咋一看没什么问题,但其实没这个必要。

 其实看一下java的源码就知道了:
public Date()
  {
    this(System.currentTimeMillis());
  }

已经很明显了,new Date()所做的事情其实就是调用了System.currentTimeMillis()。如果仅仅是需要或者毫秒数,那么完全可以使用System.currentTimeMillis()去代替new Date(),效率上会高一点。况且很多人喜欢在同一个方法里面多次使用new Date(),通常性能就是这样一点一点地消耗掉,这里其实可以声明一个引用。

三、 解决java前台传递时间到后台相差8个小时的时区问题

经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟
国内应该是相差8小时,所以再时间换算上相差了8小时

解决方案一,在Model的时间字段上加上注解

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date regisDate; //注册时间

@JsonFormat用于输出的时候解析,并且设置解析时区
@DateTimeFormat用于接收 前端传的时间值自动转换 可以是Date 可以是string 注意 格式要一样 如yyyy-MM-dd HH:mm:ss
个人建议都加上。

解决方案二,application.yml配置文件增加以下配置

jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

date-format指定date输出格式为yyyy-MM-dd HH:mm:ss
time-zone指定时区,解决8小时的时间差问题

四、创建Maven项目时,GroupId和Artifact Id该怎么填写呢?

最近一直想自己搭建一个项目,练习一下,但每次创建maven项目时GroupId和Artifact Id都不知道该怎么写,其实主要是不知道它们都是什么意思,所以在网上搜了一下,并在这里做个记录。

   GroupId和ArtifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。

GroupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。

  ArtifactId 也是当前工程的名字,定义maven项目在组中唯一的ID

   举个apache公司的tomcat项目例子:这个项目的GroupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,ArtifactId是tomcat。 

比如我创建一个项目,我一般会将GroupId设置为cn.zt,cn表示域为中国,zt是我个人姓名缩写,ArtifactId设置为ksj,表示你这个项目的名称是ksj,依照这个设置,在你创建Maven工程后,新建包的时候,包结构最好是cn.zt.ksj打头的,如果有个UserDao,它的全路径就是cn.zt.ksj.dao.UserDao
  在这里插入图片描述

五、Java整合极光推送 ( 简单 )

https://www.cnblogs.com/hanzhe/p/14312564.html

@Component
public class JPushUtil {

    // 设置好账号的app_key和masterSecret是必须的
    private static String APP_KEY = "bedab8db78aeb49ffc39607c";
    private static String MASTER_SECRET = "1bf73e7050899e9de2fa18fb";


    // 极光推送>>android
    //Map<String, String> parm是我自己传过来的参数,可以自定义参数
    public static void jpushAndroid(Map<String, String> parm) {

        // 创建JPushClient(极光推送的实例)
        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
        // 推送的关键,构造一个payload
        PushPayload payload = PushPayload.newBuilder()
                 .setPlatform(Platform.android())//指定android平台的用户
                 .setAudience(Audience.alias("text_123")) // 设置别名发送,单发,点对点方式
                 .setNotification(Notification.alert(parm.get("msg")))
  //              .setAudience(Audience.all()) // 你项目中的所有用户

                //.setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) // 发送内容
                // TimeToLive 两个小时的缓存时间
                 .setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())
                //.setMessage(Message.content(JSON.toJSONString(parm.get("msg")))) // 自定义信息
                 .build();

        try {
            PushResult pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 设置推送参数
        // 这里可以自定义推送参数了
        Map<String, String> parm = new HashMap<String, String>();
        // 设置提示信息,内容是文章标题
        parm.put("msg","shujuelin");
        parm.put("title","某电商类APP");
        parm.put("alias","alias");
        JPushUtil.jpushAndroid(parm);

    }

六、SpringBoot-RestTemplate实现调用第三方API

  1. RestTemplate的方式来调用别人的API,将数据转化为json 格式,引入了fastjson
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.28</version>
</dependency>
  1. 编写RestTemlateConfig,配置好相关信息
 
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
 
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
 
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(15000);
        factory.setReadTimeout(5000);
        return factory;
    }
}

3.编写controller,调用第三方的API,浏览器模拟get请求,postman模拟post请求

 
 
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
 
import java.util.Map;
 
@RestController
public class SpringRestTemplateController {
    @Autowired
    private RestTemplate restTemplate;
    /***********HTTP GET method*************/
    @GetMapping("/testGetApi")
    public String getJson(){
        String url="http://localhost:8089/o2o/getshopbyid?shopId=19";
        //String json =restTemplate.getForObject(url,Object.class);
        ResponseEntity<String> results = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
        String json = results.getBody();
        return json;
    }
 
    /**********HTTP POST method**************/
    @PostMapping(value = "/testPost")
    public Object postJson(@RequestBody JSONObject param) {
        System.out.println(param.toJSONString());
        param.put("action", "post");
        param.put("username", "tester");
        param.put("pwd", "123456748");
        return param;
    }
 
    @PostMapping(value = "/testPostApi")
    public Object testPost() {
        String url = "http://localhost:8081/girl/testPost";
        JSONObject postData = new JSONObject();
        postData.put("descp", "request for post");
        JSONObject json = restTemplate.postForEntity(url, postData, JSONObject.class).getBody();
        return json;
    }
}

七、java用spilt方法分割ip地址

必须对"."进行转意
“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。

public static void main(string[] args) {  
string value = "192.168.128.33";  
string[] names = value.split("\\\\.");  
for (int i = 0; i < names.length; i++) {  
system.out.println(names[i]);  
}}  

以上是关于java开发问题的主要内容,如果未能解决你的问题,请参考以下文章

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

java开发的项目案例,大厂内部资料

java代码在片段活动中不起作用

如何重构这个 Java 代码片段

LockSupport.java 中的 FIFO 互斥代码片段

如何在片段中使用 GetJsonFromUrlTask​​.java